こしあん
2019-06-24

PyTorchでDCGANやってみた

Pocket
LINEで送る


PyTorchでDCGANをやってみました。MNISTとCIFAR-10、STL-10を動かしてみましたがかなり簡単にできました。訓練時間もそこまで長くはないので結構手軽に遊べます。

はじめに

PyTorchでDCGANやってみました。コードはほとんどこの記事のコピペです。MNISTとCIFAR-10、STL-10でやってみました。コードは末尾にあります。

5ステップでできるPyTorch – DCGAN
https://qiita.com/hokuto_HIRANO/items/7381095aaee668513487

MNIST

結果だけ示します。MNISTから。


100エポック訓練させました。GPU2枚で10分程度ですね。エラーグラフ的にもう少し長く訓練すると綺麗になったかもしれません。

ちなみにMNISTをConvTransposeではなく、Upsampling+Conv2Dでやると、すぐDのロスが0近くなってうまく出力されなかったです(Dが強くなりすぎる)。MNISTではConvTrasnposeのほうがうまく行ったので、他の例でもConvTransposeを使っています。

CIFAR-10


300エポック訓練させました。こちらは1時間弱程度。それっぽいなにかができているような感じはします。

STL-10


STL-10のunlabeled-dataを300エポックほど。エポック間の画像の保存?データの再読み?に時間が時間がかかって、1エポック1分~1分半かかりました。実際GPUが動いている時間はその半分もないのになんだろう。

これは少しモデルの表現力が足りないのかもしれませんね。最後モード崩壊しているような気がしなくもない。

おわりに

PyTorchのDCGAN結構簡単でした。モデルのTraiableがどうとか意識しないでBackpropするかしないかで書ける、FakeとTrueの変数の入れ替えで同一の損失関数でできるのとかかなり簡単でした。PyTorchでのGAN結構楽しそう。

コード

Related Posts

Python(Numpy)で画像を水平反転する方法:Data Augmentation向け... OpenCVを使わずに単純に画像を左右反転(水平反転)する方法を考えます。ディープラーニングでデータのジェネレーターを自分で実装した場合、Data Augmentationを組み込む際にも必要になります。それを見ていきましょう。 左右反転自体は実は簡単 例えばNumpyの行列を左右反転させてみ...
Kerasで損失関数に複数の変数を渡す方法... Kerasで少し複雑なモデルを訓練させるときに、損失関数にy_true, y_pred以外の値を渡したいときがあります。クラスのインスタンス変数などでキャッシュさせることなく、ダイレクトに損失関数に複数の値を渡す方法を紹介します。 元ネタ:Passing additional arguments...
データのお気持ちを考えながらData Augmentationする... Data Augmentationの「なぜ?」に注目しながら、エラー分析をしてCIFAR-10の精度向上を目指します。その結果、オレオレAugmentationながら、Wide ResNetで97.3%という、Auto Augmentとほぼ同じ(-0.1%)精度を出すことができました。 (※すご...
PyTorchで複数出力があるモデルの出力の型について... 出力が複数あるモデルの訓練というのは少し複雑なモデルだとよく出てきます。PyTorchでは複数出力のモデルの、出力の型はどうなっているでしょうか。それを見ていきます。中間層の値を取りたい場合も使えます。 サンプルコード import torch from torch import nn cl...
TensorFlow/Kerasでネットワーク内でData Augmentationする方法... NumpyでData Augmentationするのが遅かったり、書くの面倒だったりすることありますよね。今回はNumpy(CPU)ではなく、ニューラルネットワーク側(GPU、TPU)でAugmetationをする方法を見ていきます。 こんなイメージ Numpy(CPU)でやる場合 Num...
Pocket
Delicious にシェア

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です