28×28の手書き数字の場合のAutoEncoderの出力画像


2017年 03月 27日

前回、28×28の手書き数字のAutoEncoderプログラムの説明をした。
そして走らせて、やっと(笑)画像が集まったので、ご覧いただこう。

10000エポックでは、この程度の画像にしか再現されない。
mnistae10000SGD.png1万エポック程度では、何が何だか分からない。
それで、一気に10万エポックまで飛ぼう。

mnistae100000SGD.png10万エポックになると、半数くらいは判別できそうだが、まだとっても苦しいところだ。

30万エポックになると、かなり数字がはっきり見えてくるようになる。
mnistae300000SGD.png30万エポックになると、かなり正確に元のイメージを再現するようになってくる。

そして、100万エポックになると、ここまで再現できるようになる。

mnistae1000000.png100万エポックになると、文句なく十分な再生が行われたと判断できるだろう。

しかし、まずい。
エポック数が100万とは、100万回も学習を繰り返さないと使えないということだ。つまり、超バカだ。

もっとエポック数が少なくて、ちゃんと再現される方法はないものだろうか。


プログラムの初期化部分に optimizerの選択があるようだ。
# Initialize model
model = MyAE()
optimizer = optimizers.SGD()
optimizer.setup(model)
SGDというオプティマイザーが選択されているようだ。
SGDとは stochastic gradient descent(確率的勾配降下法) のことだが、面倒なので説明は省略。まあ、最初に説明されることが多い最適化方法である。

もしかして、ここを書き換えると、もっと上手くいくのだろうか?