LINEで送る
Pocket

久しぶりの投稿です。

 

このところ、「AI」のことをやっています。

 

このブログには、ちょこちょことAI、あるいはディープラーニングに関することも投稿していきます。

 

人に呼んでもらう記事、というよりは、どちらかといえば、自分用のメモや備忘録的な意味合いがあります。

 

さて、今回はオートエンコーダーです。

 

オートエンコーダーは、ニューラルネットワークです。

 

言語はPythonです。

 

from keras.layers import Input, Dense
from keras.models import Model

encoding_dim = 32 # 32 floats -> compression of factor 24.5, assuming the input is 784 floats

input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation=’relu’)(input_img)

 

縦横それぞれ28画素の画像、

つまり、

28x28=784次元のベクトルデータを

いったん32次元に圧縮します。

 

次元が大幅に削減されたため、

この段階でかなりの「情報落ち」が発生します。

 

この情報落ちしたデータを今度は・・・

 

decoded = Dense(784, activation=’sigmoid’)(encoded)

autoencoder = Model(input_img, decoded)

 

で、784次元に戻します。

上のコードでは、

784次元⇒32次元⇒784次元

というオートエンコーダーを生成しています。

 

さて、当然、32次元に圧縮した段階で大幅に情報落ちしているため、

通常であれば、これを784次元に戻そうとしても、戻りません(一応、なんらかのデータはできますが・・・)。

 

ところがこのオートエンコーダーを、事前に学習しておくことで、

データを再現できるようになります。

 

学習しておいたデータの特徴を持ったデータを入力すれば、

オートエンコーダーは、その特徴をもとに再現できます。

 

逆に、学習していないデータを入力しても、そのデータを再現できません(ノイズが入る)。

 

さて、実際に、NMISTの数字画像データ6万枚を用いて、オートエンコーダーの学習を行い、

再現させてみました。

 

数字画像、上段が入力、下段が出力です。

全く同じではないものの、人間の目には、同じような画像に見えますね。

 

今日はここまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です