自己符号化器,AutoEncoderの実装

機械学習プロフェッショナルシリーズの「深層学習」のChapter5を参考に,PyTorchでAutoEncoderの実装を行いました.

 

パラメータとしては,

 入出力層が28x28次元,

 中間層が100次元,

 (28x28 -> 100 -> 28x28)

 中間層の活性化関数はReLU,

 出力層の活性化関数は恒等写像

 重みはガウス分布(σ=0.01)で初期化,

 SGD(重み減衰λ=0.1,モメンタムµ=0.5

 Loss関数は二乗誤差

にしました.

 SGDよりもAdamの方がLossが落ちたのでAdamに変更しました.

 

結果としては,

f:id:akmtn:20170518183029p:plain

このようになり,数字は認識できます.画像全体として(背景が?)白くなっているのは,重み0が濃淡256階層の中央に来るように調整することで治るのかもしれません.

中間層のユニットを100個よりも大きくすると,よりLossも下がり,よりくっきりとした画像が得られました.中間層のユニットの数が特徴の表現力を表していることを実感できます.

 

コードはここにあります.

シンプルなGANの実装

GANの論文を読んだついでにMNIST用に実装しました.

ネットワークには,Convolutionを使わず,多層ニューラルネットです.層の数,活性化関数やバッチ正規化などの設定はてきとうです.なのでGANもどきです.

f:id:akmtn:20170514191216p:plainがんもどき

 

pytorchで実装したかったので,本家のDCGANのコードを参考にしながら書きました.

github.com

また,こちらの方の実装も参考にしました.(keras)

yusuke-ujitoko.hatenablog.com

 

結果として,以下のような出力を得ました.

f:id:akmtn:20170514190525p:plain

それなりに数字には見えますが,1が多い一方,2が少ないという偏りがありました.

 

一応,コードはここにあります.