前回、28×28の手書き数字のAutoEncoderプログラムの説明をした。
そして走らせて、やっと(笑)画像が集まったので、ご覧いただこう。
10000エポックでは、この程度の画像にしか再現されない。

1万エポック程度では、何が何だか分からない。
それで、一気に10万エポックまで飛ぼう。

10万エポックになると、半数くらいは判別できそうだが、まだとっても苦しいところだ。
30万エポックになると、かなり数字がはっきり見えてくるようになる。

30万エポックになると、かなり正確に元のイメージを再現するようになってくる。
そして、100万エポックになると、ここまで再現できるようになる。

100万エポックになると、文句なく十分な再生が行われたと判断できるだろう。
しかし、まずい。
エポック数が100万とは、100万回も学習を繰り返さないと使えないということだ。つまり、超バカだ。
もっとエポック数が少なくて、ちゃんと再現される方法はないものだろうか。
プログラムの初期化部分に optimizerの選択があるようだ。
# Initialize model
model = MyAE()
optimizer = optimizers.SGD()
optimizer.setup(model)
SGDというオプティマイザーが選択されているようだ。
SGDとは stochastic gradient descent(確率的勾配降下法) のことだが、面倒なので説明は省略。まあ、最初に説明されることが多い最適化方法である。
もしかして、ここを書き換えると、もっと上手くいくのだろうか?