深層学習5章の自己符号化器をTensorflowで作ってみる
間がかなり空いてしまった。
イルカの深層学習5章にて自己符号化器なるものの説明があった。これは入力層よりノードの少ない中間層で符号化し、入力と同じノード数の出力層にて復号化を行う方法でいいのだろうか。入力のノード数より少ないノード数に落とした時、どれだけ入力と近い結果が得られるかが大事なのかな?
読んでいて「復号できんの!すげえ!!!!!!!!」とワクワクしたのと、誤差関数などが自分でも実装できそうだったので、Tensorflowで構築してみることにした。
本通り、損失関数には二乗誤差を、出力の活性化関数には恒等関数を使用した。
MNISTのデータセットを用いたコードはここ。
学習を続けることに、徐々に復号の結果が入力に近くなっていくのがわかった。
次に 64x64 の道路標識の「止まれ」でやってみようと思った。
最初はRGBでやっていたが
禍々しいものが生まれた。何を学習したのだろうか。
損失の値もいい値にはならなかったので、諦めてグレースケールの方でやってみることにした。
コードはここ。
こっちはノード数を 50x50 にした。 32x32 の半分のノード数では上手くいかなかった。
最後の結果からわかるように訓練データの結果は
そこそこ形がわかるような出力になってくれたが、テストデータの結果は
モザイクのような結果になってしまった。
訓練データが少なくて過適合を起こしているのかもしれない。
結果を観察するのは楽しかった。