前回はとりあえずTensorFlowを使ってGANを書くところをやってみました。
今回もこちらの本を参考にGANの別のモデルをやってみます。
https://www.amazon.co.jp/Learning-Generative-Adversarial-Networks-Ganguly/dp/1788396413
また、こちらのブログも参考にさせていただきました。日本語で解説されていてわかりやすかったです。
CGAN (Conditional Generative Adversarial Network)
プリミティブなGANでは、Generatorにはノイズだけを入力します。 これは言い換えると、Generatorが何を生成するかはGeneratorに委ねられています。
Generatorが生成する確率分布を制御するアイデアがCGAN (Conditional GAN)です。
アイデア自体はかなりスッキリしていて、ざっくりいうとGeneratorとDiscriminatorの入力に教師データのラベルを加えるだけです。 概念図としては、こんな感じですね。
前回と違うのは、Y(ラベル)が入力として加わっていることだけです。
実装
入力の要素が違うくらいで、実装はほぼほぼ前回と一緒で動きます。 実際書いてみるとこんな感じです。
今回はFasion-MNISTという服の絵を学習データにしています。 使い方はMNISTと同じなので、数字じゃない画像ってだけです。
コード全体はこちら。
https://github.com/nogawanogawa/CGAN_tensorflow.git
結果(Fasion-MNIST)
生成された画像を見ていきます。
Iteration = 0
前回同様、学習前なのでこんな感じになります。
Iteration = 1000
これも前回同様、真ん中らへんになんかあるなーってレベルになってきました。
Iteration = 5000
このへんまで来ると、もう服っぽさが分かるようになっています。
Iteration = 10000
このへんまでいけばもう服っぽいですね。これより学習させてみたのですが、あんまり出力は変わりませんでした。
感想
生成データの制御のアイデアとして、CGANを勉強しました。 ここまで制御できれば、いろいろできそうな気がしてきました。