Fresopiya
場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか。

まずはとにかく自由を目指すエンジニアのブログです。
「哲学」と「プログラミング」と「政治経済」、「ブログ」がメインになるかと。
TensorFlow

【TensorFlow】TensorFlowでの自己符号化器(オートエンコーダ)の実装

どうも、とがみんです。

以前の記事で、自己符号化器(Auto encoder:オートエンコーダー)について紹介しました。


この記事では、TensorFlowを用いて自己符号化器を実装し、手書き数字画像データの次元圧縮と、その復元について紹介していきます。

実装する自己符号化器(オートエンコーダ)の概要

今回実装するのは、以下のようなモデルです。

中間層のノードは400(20×20)100(10×10)25(5×5)とし、それぞれの次元圧縮後の出力結果と復元結果を比較していきます。

活性化関数にはシグモイド関数を利用します(出力を0〜1の間にするため)。

データの準備

手書き数字の画像データを準備します。

自己符号化器(オートエンコーダ)の実装

以下のステップで実装していきます。

  1. パラメータの準備
  2. 処理内容の定義
  3. 処理の実行プログラムの作成・実行後の保存
  4. 学習後モデルの読み込み

パラメータの準備

各パラメータを入れる変数を用意します。デコード用の重みパラメータはエンコード時の重みパラメータを転置したものになっています。

処理内容の定義

エンコード処理、デコード処理を以下のように定義します。

学習について、損失関数には、2乗和誤差、学習アルゴリズムは「急速降下法」を使用します。

処理の実行プログラムの作成

学習後パラメータ保存用のオブジェクトと、損失関数の値の推移を格納するリストを用意します。

実行プログラムを記述していきます。

学習後モデルの読み込み

結果の出力

得られた結果を表示します。まず、表示するために、データを整えます。

以下のコードによって、結果を出力します。

以下に中間ノード数、400(20×20)100(10×10)25(5×5)のそれぞれに置いて、エンコード後(次元圧縮後)結果とその復元結果について書いていきます。

中間ノード数400(20×20)

上から、「元画像データ」、「エンコード後(次元圧縮後)画像データ」、「復元後画像データ」になります。

中間ノード数100(10×10)

上から、「元画像データ」、「エンコード後(次元圧縮後)画像データ」、「復元後画像データ」になります。

中間ノード数25(5×5)

上から、「元画像データ」、「エンコード後(次元圧縮後)画像データ」、「復元後画像データ」になります。

参考文献

>Autoencoder / Sparse Autoencoderの実装と実験

>Tensorflow オートエンコーダでmnistを学習(Qiita記事を見ながら..)