深層学習5章の自己符号化器をTensorflowで作ってみる

間がかなり空いてしまった。
イルカの深層学習5章にて自己符号化器なるものの説明があった。これは入力層よりノードの少ない中間層で符号化し、入力と同じノード数の出力層にて復号化を行う方法でいいのだろうか。入力のノード数より少ないノード数に落とした時、どれだけ入力と近い結果が得られるかが大事なのかな?
読んでいて「復号できんの!すげえ!!!!!!!!」とワクワクしたのと、誤差関数などが自分でも実装できそうだったので、Tensorflowで構築してみることにした。
本通り、損失関数には二乗誤差を、出力の活性化関数には恒等関数を使用した。

MNISTのデータセットを用いたコードはここ
学習を続けることに、徐々に復号の結果が入力に近くなっていくのがわかった。

次に 64x64 の道路標識の「止まれ」でやってみようと思った。
最初はRGBでやっていたが

f:id:Owatank:20170813143647p:plain

禍々しいものが生まれた。何を学習したのだろうか。

損失の値もいい値にはならなかったので、諦めてグレースケールの方でやってみることにした。
コードはここ

こっちはノード数を 50x50 にした。 32x32 の半分のノード数では上手くいかなかった。
最後の結果からわかるように訓練データの結果は
f:id:Owatank:20170813152429p:plain
そこそこ形がわかるような出力になってくれたが、テストデータの結果は
f:id:Owatank:20170813152508p:plain
モザイクのような結果になってしまった。
訓練データが少なくて過適合を起こしているのかもしれない。

結果を観察するのは楽しかった。