0

設置

我使用Tensorflow爲圖像構建了一個自動編碼器。我的圖片長度和寬度都在30像素左右。我使用5層:Tensorflow autoencoder:如何獲得有代表性的輸出?

  1. 輸入層
  2. 編碼器層256個與神經元的線性函數。 (該層應該起到預處理PCA的作用)。
  3. 具有128個具有sigmoid函數的神經元的編碼器層。
  4. 具有256個具有sigmoid函數的神經元的解碼器層。
  5. 解碼器/輸出層具有與具有線性函數的輸入一樣多的神經元。

所有層使用偏見,都是這樣

layer_1 = tf.nn.sigmoid(tf.add(
    tf.matmul(x, tf.Variable(tf.random_normal([n_input, n_hidden_1]))), 
    tf.Variable(tf.random_normal([n_hidden_1])) 
)) 

定義我的成本是由

cost = tf.reduce_mean(tf.div(tf.reduce_sum(tf.pow(y_true - y_pred, 2)), 2)) 

定義,我以前RMSPropOptimizer與開始學習的0.01率。

我訓練了大約250000張圖片的自動編碼器。在下面我顯示測試數據的結果,我沒有訓練。上排總是顯示輸入圖像,下排總是顯示輸出圖像。

我使用的自動編碼器對數據MNIST令人滿意(陣列單元是從0-1的值): enter image description here

我使用的自動編碼器上我把自己的照片令人滿意(數組細胞是從0-100的值): enter image description here

凡均方根誤差

rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(y_true, y_pred)), axis=1)) 

是正如人們所預料 - 前三照片更高(達克奈德,白化,把在用於不變照片的橫),和下:

17.5, 29.6, 12.9, 11.7, 11.2, 11.7, 7.3, 7.1, 7.1, 8.1 

但是自動編碼器不工作爲紋理圖像滿意的(陣列單元是從0-1)。首先,我用RMSPropOptimizer並得到

enter image description here

因爲我的成本在那裏訓練中相當高,並沒有改變我從https://stackoverflow.com/a/40956761/4533188遵循的建議和使用AdamOptimizer。事實上,我得到更好的結果

enter image description here

雖然成本較低,但仍不斷的時代中:

enter image description here

而且輸出圖像是相當黑暗。我認爲,這也可能爲什麼我rmse s爲還不如我預料的原因:

0.4642, 0.2669, 0.4976, 0.4378, 0.4753, 0.4688, 0.4615, 0.4571, 0.4691, 0.4487 

請注意,我會想到的是,rmse s是高第一個圖像由於中間點和第二個圖像,因爲它變暗了。我猜想rmse的原因並不如人所願,因爲輸出圖像太暗了。

問題

  1. 爲什麼成本沒有減少過時代和我有什麼可以做的就是這是怎麼回事?
  2. 爲什麼輸出圖像如此黑暗,我該怎麼做才能讓它們成爲輸入圖像的更好表現形式?
  3. 我該如何獲得rmse

回答

0

您的網絡顯然不訓練

  • 你Autoenconder層不對稱
  • 不要使用乙狀結腸,使用RELU
  • 使用更好的初始化技術(具體分佈取決於激活功能)
  • 分享編碼器和解碼器層的權重
+0

1.如果我想要輸出是線性的並且第一個隱藏層是線性的,那麼您對層的建議是什麼? 3.你推薦什麼樣的乙狀結腸線形,ReLU? 4.你是什麼意思?把它們分享到SO? – Make42

+0

2.爲什麼我應該使用ReLU而不是S形? – Make42

+0

ReLU已被證明比S形更易於訓練。我建議你研究這個非常好的資源,以便在開發神經網絡方面取得成功。 deeplearningbook.org – fabrizioM