今日目標
- 實作 Autoencoder
- 比較輸入以及輸出
實作
定義 weight 以及 bias 函數
|
|
autoencoder 架構
初步的構想是建立一個七層的神經網路,在 encoder 維度會從 784 逐步變成 300, 100, 5 (code layer), decoder 的時候再逐步轉回 100, 300, 784.而這個想法在現在對 tensorflow 比較熟悉的情形下是很容易實現的,以下就是我實現的程式碼片段
input -> 784 -> 300 -> 100 -> 5 (code layer) -> 100 -> 300 -> 784 -> output
|
|
loss
loss 函數我使用了 mean square error
,而 optimizer 原本是使用 GradientDescentOptimizer
,但是做出來的 decode 結果變得非常糟糕 (如下).後來上網搜尋了以後改用 RMSPropOptimizer
,以下會隨機選出數個數字來看看所做出來的結果.
|
|
training
|
|
final loss 0.031768
成果
|
|
調整 code layer 維度
而接下來當我想嘗試把 code layer 的維度調整為 2 維來看看
我們可以發現完全糊掉了,只用二維來表示輸入數字是不太夠的.更進一步仔細看 code layer 的值,都已經接近零,表示這個網路已經算是死掉了,因此還要想想為什麼會造成這樣的結果.
今日心得
用 tensorflow 實作了 autoencoder,但是在降成兩維的效果並不好,需要再找找看有什麼方法可以幫助解決這個情形, google 上看到說 sparse autoencoder 可能可以幫助這個情形.