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記事を見ながら..)