Re:ゼロから始めるML生活

どちらかといえばエミリア派です

【写経】TensorFlowを使ったCGANの実装

前回はとりあえずTensorFlowを使ってGANを書くところをやってみました。

tsunotsuno.hatenablog.com

今回もこちらの本を参考にGANの別のモデルをやってみます。

https://www.amazon.co.jp/Learning-Generative-Adversarial-Networks-Ganguly/dp/1788396413

また、こちらのブログも参考にさせていただきました。日本語で解説されていてわかりやすかったです。

qiita.com

CGAN (Conditional Generative Adversarial Network)

プリミティブなGANでは、Generatorにはノイズだけを入力します。 これは言い換えると、Generatorが何を生成するかはGeneratorに委ねられています。

Generatorが生成する確率分布を制御するアイデアがCGAN (Conditional GAN)です。

イデア自体はかなりスッキリしていて、ざっくりいうとGeneratorとDiscriminatorの入力に教師データのラベルを加えるだけです。 概念図としては、こんな感じですね。

f:id:nogawanogawa:20180318142744j:plain

前回と違うのは、Y(ラベル)が入力として加わっていることだけです。

実装

入力の要素が違うくらいで、実装はほぼほぼ前回と一緒で動きます。 実際書いてみるとこんな感じです。

今回はFasion-MNISTという服の絵を学習データにしています。 使い方はMNISTと同じなので、数字じゃない画像ってだけです。

コード全体はこちら。

https://github.com/nogawanogawa/CGAN_tensorflow.git

結果(Fasion-MNIST)

生成された画像を見ていきます。

Iteration = 0

f:id:nogawanogawa:20180318120450p:plain

前回同様、学習前なのでこんな感じになります。

Iteration = 1000

f:id:nogawanogawa:20180318120506p:plain

これも前回同様、真ん中らへんになんかあるなーってレベルになってきました。

Iteration = 5000

f:id:nogawanogawa:20180318120522p:plain

このへんまで来ると、もう服っぽさが分かるようになっています。

Iteration = 10000

f:id:nogawanogawa:20180318120536p:plain

このへんまでいけばもう服っぽいですね。これより学習させてみたのですが、あんまり出力は変わりませんでした。

感想

生成データの制御のアイデアとして、CGANを勉強しました。 ここまで制御できれば、いろいろできそうな気がしてきました。