Pytorchでニューラルネットワークモデルのパラメータが更新されているかどうかを確認したいときがある。モデルのパラメータを確認する方法はいくつかあるけど、Pytorchはモジュールごとにモデルを作っていくことが多いので、とりあえず簡単に確認する方法を…
Pytorchでモデルを保存する場合、モデルのパラメータのみを保存することが多い。しかし、モデルパラメータだけではlossがどれくらいか、optimizerは何を使ったか、何イテレーション学習してあるかなどの情報がわからない。これらがわからないと特に途中から…
Deep learningで学習するとき、ほとんどどんなタスクでも使うデータ拡張(data augmentation)。画像の輝度値をランダムで変化させたり、zoom in/outや画像のshift, flip, 回転などを使って、ネットワークを入力の分布にできる正則化の効果がある。 だけどOp…
Python の numpy では複素数のdtypeがあるけど、pytorch tensorには複素数型がない。Githubでtensor自体を複素数にしているものがあるけど、なんとなくまだcudaサポートしていないとか、発展途上な感じ。 github.com そもそもtensorを複素数にするとconvolut…
高解像度の画像を生成できるProgressive GAN (PGGAN)を実装してみた。 色々と苦労があって1週間以上時間を使った。ガチで研究するなら再現で1週間くらいかかるようなくらいはやらないといけないのかもしれない。論文ではさらに評価指標をどうするかなどの細…
GPUが古くなったせいか、nvidiaドライバの自動制御があってもGPU温度が高くなるとGPUが勝手に止まるようになってきたので、nvidia-smiをpythonからたたいて温度情報を取り出し、温度が高くなったらGPU計算をいったん停止するスクリプトを書いてみる。 nvidia…
PytorchでGANをやってみる。前からずっとGANの記事を書こうと思ってたんだけど、自宅PCのGPUまわりの挙動が怪しくなって、しばらくうまくGPUでの学習ができなくなってた。やっと動くようになったので、GANのtrainingをしてみた。 Generative Adversarial Net…
kerasを使っていたときは、model.summary()という関数があって、ネットワークの各レイヤにおける出力サイズがどうなっていくかを簡単に可視化できていた。 Pytorchはdefine by runなのでネットワーク内の各層のサイズはforward処理のときに決まる。なのでな…
Pytorchで自作Datasetを作って、さらにDataLoaderからのバッチ出力を(x, y)だけではなく(x1, x2, y)とか(x, y, c)などと自由に制御したいときがある。 例えばtriplet lossを使いたいときは、ターゲットクラスyに対して複数の入力(x1, x2)を取ってくる必要が…
PytorchでVAEをやってみる。理論的なところは他に説明がたくさんあるので省略する。VAEは最初から自分で書こうとするといろんなところでハマるので、とりあえず動くモデルを載せてみることにする。 VAEモデルの定義 まずはモデルの実装から。学習はネットワ…
pythonのlistで指定した文字列を含む要素だけを抽出したい。linuxでいうgrep的なことをlistやりたい。 listから特定の文字列を含む要素を抽出 以下のようにすると指定した要素を取り出せる。keyに探したい言葉を入れる。mylistは検索対象のリスト。outが出力…
Deep dreamが出た頃はまだtensorflowも公開されておらず、ディープラーニングはpythonというよりは、LuaやC++で書かれていた。懐かしのDeep dreamをpytorchを使って実装してみる。 下記のようなアナザーワールドを作ってみよう。 実装上のポイント 実装上の…
Pytorchでモデルを学習した後にモデルの学習済み重みパラメータを保存して、別のプログラムで読み込みたい。特にGPUで学習したモデルを、GPUを持たないCPUのみのPCで使いたい場合によくハマるのでメモを残しておく。 GPUで学習してGPUで読み込む 保存方法(GP…
Pytorchはdefine by run(実行しながら定義)なライブラリなので、 学習の途中でoptimizerにアクセスして、 learning rateを変更したりしてみたい。ということで、optimizerを定義した後でlearning rateなどにどのようにアクセスするかを調べてみた。 単純に…
Pytorchでネットワークの挙動に再現性を持たせたい。しかしPytorchでは、デフォルトではネットワークの重みは乱数で初期化され、乱数のシード値も固定されていない。Pytorchで乱数シードを固定してネットワークの初期値に再現性をもたせる方法を調べてみた。…
PytorchのDataLoaderって便利だなと思いつつも、forループ以外の方法でデータを取り出すことができなかったので、中身を少し調べてみた。以下のようにすればデータがとれることがわかった。 tmp = testloader.__iter__() x1, y1 = tmp.next() x2, y2 = tmp.n…
Pytorchのデータセットに入っているMNISTとその亜種について調べてみた。これらのデータセットの呼び出し方と使い方についてまとめてみる。 取得できるMNIST系データセット torchvision.datasetsに入っているMNIST系のデータセットは下記のコマンドで確認で…
Pytorchで自分で定義したCNNを使って、手書き数字MNISTの分類をやってみる。特にpytorchにおけるニューラルネットの書き方と、ネットワークの学習についてソースコードを交えて説明する。 ネットワークの定義 まずはネットワークの定義のやり方。pytorchでは…
LeNet5ライクのネットワークを実装したという記事は多いけど、LeNetを論文通りに再現してみた記事がないかなと思ったので、アーキテクチャの部分だけ再現してみた。 LeNet-5 この図の中にもSub-samplingとかGaussian connectionとか聞いたことがない言葉がち…
pytorchでtensorの画像サイズを縮小するにはadaptive_avg_pool2dを使えばよかった。しかし拡大する際にはこの関数だとnearest neighbor になる。ということでtorch tensorでbicubic補間をやってみる。 まずは結果から。opencvでbucibucした場合とほとんど変…
Pytorch tensor から numpy ndarray への変換とその逆変換についてまとめる。単純にtorch.from_numpy(x)とx.detach().numpy()を覚えておけばよいので、その使い方を示しておく。 すぐ使いたい場合は以下 numpy to tensor x = torch.from_numpy(x.astype(np.f…
Pytorchで割とよく検索するけど、ひとつの記事にするほどでもない事をまとめてみる。使っていて便利そうだと思った情報はどんどん追加していくつもり。 cuda.is_available(): GPU動作チェック GPUかCPUかを自動判断 to(x.deice): model中での変数がGPUかCPU…
話題のEfficientNetを実装してみる。基本的な構造はNASNetとほぼ変わらないんだけど、EfficientNet特有の広さ、深さ、解像度などのパラメータも含めてコードを書いてみる。 画像はこちらのサイトから引用しました。 環境 python 3.7.4 torch 1.0.0 ヘッダ im…
画素毎にテクスチャの特徴抽出をするのに、全ての画素に対してその周辺窓のGLCMを計算したい。この計算をするのに、pythonなのに画素の二重forループ使って計算する方法があるけど、遅すぎて使い物にならない。そこで、numpyを使って画素毎のGLCM計算をスク…
転移学習、スタイル変換、物体検知、セマンティックセグメンテーション、メトリックラーニング、perceptual loss、ゼロショット学習など学習済みモデルの中間層を使いたい場合がよくある。Pytorchで使える学習済みモデルの特徴マップと特徴ベクトルを抽出す…
OpenCVなどでUSBカメラなどから得られた動画を流している際に、各フレームの解析結果をグラフにして動画と一緒にリアルタイムで表示したいときがある。このようなときにプロット図をいったんファイルに保存しながらやると面倒なので、できればメモリ上でのや…
Pytorchを使って1次元の線形回帰 (Linear Regression) の学習を実装してみる。目的はPytorchのモデルの書き方や学習コードの書き方の再確認。 線形回帰モデル まずはPytorchで線形回帰モデルを書いてみる。パラメータは傾き(weight)と切片(bias)の2つ from…
pythonのバージョンやフォルダの確認、pipのバージョン、pipでインストールできるライブラリのバージョンなどを確認する方法をリストアップしてみる。この記事で確認できるのは以下の情報。 pythonそのもののバージョン pipそのもののバージョン pipでインス…
OpenCVを使って、画像のHSV色空間における色相 Hue を回転させて色を変化させてみる。つまり、下記の図のような出力を得たい。 RGBからHSVへの変換 ja.wikipedia.org 上記のサイトに詳しく書いてあるけど、HSVは色相(Hue)、彩度(Saturation・Chroma)、明度(V…
ディープラーニングでPytorchを使っていると、モデルの定義やモデルに組み込むモジュールの定義でクラスを作ることが多い。このとき、nn.Moduleを継承して定義するためsuperは必ず使う。ここでsuperの引数にクラス名を書くため、クラステンプレートのコピー…