python

CNNによるMNISTの埋め込み(t-SNEも)

前回に続いて,学習済みモデルの中間層の出力を取り出す例として,学習済みCNNを自己符号化(オートエンコーダ)として使う例をやってみる。 コードはPyTorch公式exampleのmnistを少しいじって,モデルの中間層が取り出しやすくして,t-SNEによる埋め込みを行…

PyTorchのモデルの書き方の整理

サマリ いくつかの書き方があるが,混乱するのは下記の種類が色々Webに見られるからか。 ① initにはパラメタありだけ,パラメタが無いものはforwardに。これが一番柔軟性があるように思う。モデルの中間層を細かく取り出したり,活性化関数を変えたりしたい…

PyTorchでのモデルの中間層へのアクセス方法

PyTorchにはいろいろなモデルの書き方があるけど,このメモの内容を考えると学習パラメタが無いレイヤ含めてinitにもたせておくほうが良いのかもしれない。 (と思ったけど,一番最後のレイヤをとりあえずコピーしてforwardを再定義するやり方ならどっちでも…

CNN in MNIST with PyTorch (PyTorchの基本メモ)

PyTorchのチュートリアルとexampleはとても参考になる。0.4から色々変わっているようだし,改めて情報を整理する。 まず今回は,MNISTを動かしながら以下の項目についてメモしておく。 MNISTデータのロード方法。可視化方法。 ネットワーク,学習,テストの…

クランプ関数(0〜255に値を丸める)のやり方

またまたcodewarsの他人の解答より。 本題はRGBの変換だったけど,その前処理で0以下の数値を0に,255以上の数値を255にクランプする処理がある。 僕は富豪的に下記で。 lst = map(lambda x: 0 if x<0 else x, lst) lst = map(lambda x: 255 if x>255 else …

文字列からの数値抜き出しとソート時のインデックス取得

CodeWarsより。 わかりやすいように少し改題。また,CodeWarsはPython2で動いているので下記のコードは通らない。 問題 入力:数値を含む文字列の配列が与えられる。ただし,各文字列には1~9の数字が1つだけ入っており,文字列間に含まれる数値の重複はない…

配列の中に奇数回出現する1つの整数値

codewarsというので遊んでいたら,他人の良い回答を見つけた。 問題 整数の配列が与えられる。その中に1つだけ奇数回出現する整数値が存在する。それを求めよ。 例)[1,3,5,2,6,8,4,3,1,5,2,6,8,3] -> 3 色々とやり方はあると思うけれど,XORを使う方法がな…

並列計算の効果検証用プログラム

並列化の試行やJITの効果テストなどのために,Forをたくさん回す計算例が必要になる。 そのような例としてモンテカルロ法を置いておく。 ToDo 並列計算のテスト用としては,モンテカルロ法のような単純に並列化される(データ共有が無い)ものだけでなく,適時…

モンテカルロ法1 (モンテカルロ積分)

Rによるモンテカルロ法入門のメモ,その1。 イントロ 統計的推論では最適化と積分の計算,特に実用上は数値計算が必要になる。 数値積分の手法としてモンテカルロ積分がある。シンプソン法などの区分法は多次元の場合に区分を細かくしようとすると計算量が…

パフォーマンス計測 in Python

timeモジュール(time.perf_counter) 使いどころは特定のコードブロックに対する計測。精度はマイクロ秒程度。精度を求める場合はこれ。(逆にcProfile/line_profileなどのプロファイリングは基本的にクロック程度の精度,1/100秒程度しかなく,ボトルネックの…

TkinterによるPythonのGUIプログラミング

趣旨 たまに使おうとするとウェブを漁りまくることになるので,注意点だけまとめておく。 ドキュメント Tkinter Reference 8.5 キーの名前一覧 tkとttk テーマを設定すれば一括してウィジットの見た目を変更できるのがttk。 多くのウィジットが同名のウィジ…

MatplotlibのimshowでRGBデータを表示

imshowは2Dデータだけでなく,RGBデータを含む(H, W, CH)のデータを表示することができる。 その際に,floatかintかによって,値の範囲が異なるようだ(調べきれていないので自信が無いけど) float32のときは,[0,1]の実数値,int32などの整数値のときは[0,2…

Pythonのパッケージ構成とimport文

パッケージについて PyPIとかへの登録とかはおいておいて,自作パッケージをimportしたり,他のプログラムから使おうとするときの方法を整理しておく。下記に従えば,最悪,mypackage以下を開発中のパッケージにコピーすれば,そのまま使える。 ディレクトリ…

gifアニメーション(convert)

やりたいこと 評価結果などをアニメーション表示したい時がある。リアルタイムなグラフのプロットならGnuplotでも良いけれど,ゲームプレイ画像などを表示したい場合には画像からアニメーションを作れると良い。 方法 "連番"の画像ファイルを用意する。注意…

機械学習の前処理でのデータの正規化/標準化

前処理の目的 体重と身長など複数の異なる特徴量を生で扱ってしまうと、出力に対して使いやすい(大まかにFitしやすい)方を優先してしまう問題がある。 内容 問題解決の単純な方法は異なるカテゴリのデータを同じ範囲のデータに変換する。 変換は入力だけでな…

ArgparserとConfigparser

Deep Learning関連のプログラムを試していると、やたらと設定パラメタが多い。 これまではargparseを使ってきたけど、コードが煩雑になるのでconfigファイルの扱い方を調べてみた。 argparse まずはargparseの基本的な使い方。 import argparse parser = arg…

pythonでのログ(logging)

ロガーは名前で管理される。逆に、同じ名前のロガーは同じものとして扱われる。 それを利用するために、モジュール側ではモジュール名(name)をロガーの名前にしておいて、ユーザ側はモジュールの名前を指定することで当該のロガーを取得して、個別に設定する…

Pythonでのインターフェイス(ABCモジュール)

pythonでインターフェイスのようなことをやりたい場合にはABCモジュールというのが使えるようだ。 でも、あんまり使っている印象はなく、raise NotImplementedErrorで簡易的に代用している場合が多いようだ。 ABCモジュールを使わない場合 簡易的にraise Not…

画像から塗り絵問題の生成(線画抽出)

塗り絵生成 先日のお絵かきロジック生成の時にPILの使い方を覚えた。 その中で、画像処理って使うのも単純で、アルゴリズムも単純なものが多いなぁ、という感想をもった。 例えば、2値化して、エッジ強調すれば塗り絵になるなぁ、すぐ出来そうだなぁ、みたい…

ヒートマップ

配列内のデータをRGBのヒートマップに変換したいことは良くあるのでメモ。 下の関数は配列内のデータの最大値(max_val), 最小値(min_val)とヒートマップ化したい値vを渡すと、そのvのRGBを返す。 def calc_heatmap_rgb(min_val, max_val, v, str_out=True): …

お絵かきロジック問題の生成

動機 前の日記でpythonでの画像の取り扱いをメモしたけど、そのモチベーションは画像からお絵かきロジックを生成したいと思ったから。というのも、最近一発描きというYoutuberさんのお絵かきロジック動画を見て癒やされていたから。一発描きさんは問題を自分…

Pythonでの画像処理の基本

画像形式の基礎知識 JPEGとかは圧縮されているとして、PNGとBMPの違いが分からなくなるのでメモ。 PNG(Portable Network Graphics) Webでのビットマップ画像を扱うために1996年に生まれた。GIFなどに対して後発なのでGIFなどで足りない機能が追加されている…

pythonでのCUIプログラミングTips

入力のTips inputで標準入力から文字を入力する場合に、カーソルキー(矢印キー)は扱いが特殊なので注意。環境依存になるが、入力されたカーソルキーをrepr付きで出力(print(repr(x)))してみると、各キーをASCIIコードでどう取得しているかわかる。 Linux(Ubu…

pythonの速度で気にするところ(高速化メモ)

高速化に関して 高速化はほんとに色々と罠が多い。意図した計測できていなかったり。(特に、python3はmapとかの返り値がジェネレータになっているので、その計測を間違っている例とかがウェブには多い。) 高速化の前に計測が必須だが,計測に関しては別のま…

Pythonでのソケット(TCP)プログラミングのメモ

ソケットプログラミング(サーバ/クライアント) 簡単なゲームを作る時とか、pythonでプロセス間の通信をしたくなる。そんな時のテンプレート。 サーバ側でIPとホストを指定してソケットを生成、クライアントからの接続を待って、接続があれば処理、これを繰り…

matplotlibのメモ

覚えておく点 matplotlibの使い方をすぐ忘れる(特に、subplot)。この書き方にこだわる必要は無いけれど、要点だけまとめておく。 手順としては、figureを作る(大きなキャンバスを定義)、figureに対してadd_subplotでサブキャンバスを作る。これはaxesって言…

Kerasのバックエンドの使い方

勾配情報を取得したり、特定のレイヤの出力を得たい場合など、色々な場面でKerasプログラムの中でTensorflowレイヤの操作をしたいことが出てくる。そんな時に使うのがバックエンド。 多くはドキュメント見れば良いが、良く分からないAPI(functionとか)もある…

Kerasの処理テンプレート

メモ モデルのcompile時に与えるmetricsは、学習の各エポック毎に計算する学習の指標を表すもの。損失関数は何もやらなくても計算しているので、損失関数以外を指定する。自分で関数を作っても良いが、大概は用意されている。良くあるサンプルではaccuracyが…

Kerasで中間ノードの出力を確認する。

kerasのドキュメントのFAQに書かれているので、それ通りにやれば良い。一応、良くあるボストンの家の価格のデータの例を記載。 そう言えば、kerasが終了時にsessionのdelに失敗する場合がある。ちゃんと、backendのclear_session()を呼ぶ。 import numpy imp…

Keras with scikit-learnのメモ

KerasはTensorflow/Theanoを使って良くあるDeep Learningアルゴリズムのパタンを効率的に実装するライブラリだけど、機械学習と言えばデータ前処理やCross-Validation,パラメタ探索とか他にも共通してやることがたくさんある。そんな機械学習共通のライブラ…