設置
我使用Tensorflow爲圖像構建了一個自動編碼器。我的圖片長度和寬度都在30像素左右。我使用5層:Tensorflow autoencoder:如何獲得有代表性的輸出?
- 輸入層
- 編碼器層256個與神經元的線性函數。 (該層應該起到預處理PCA的作用)。
- 具有128個具有sigmoid函數的神經元的編碼器層。
- 具有256個具有sigmoid函數的神經元的解碼器層。
- 解碼器/輸出層具有與具有線性函數的輸入一樣多的神經元。
所有層使用偏見,都是這樣
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的值):
我使用的自動編碼器上我把自己的照片令人滿意(數組細胞是從0-100的值):
凡均方根誤差
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
並得到
因爲我的成本在那裏訓練中相當高,並沒有改變我從https://stackoverflow.com/a/40956761/4533188遵循的建議和使用AdamOptimizer
。事實上,我得到更好的結果
雖然成本較低,但仍不斷的時代中:
而且輸出圖像是相當黑暗。我認爲,這也可能爲什麼我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
的原因並不如人所願,因爲輸出圖像太暗了。
問題
- 爲什麼成本沒有減少過時代和我有什麼可以做的就是這是怎麼回事?
- 爲什麼輸出圖像如此黑暗,我該怎麼做才能讓它們成爲輸入圖像的更好表現形式?
- 我該如何獲得
rmse
?
1.如果我想要輸出是線性的並且第一個隱藏層是線性的,那麼您對層的建議是什麼? 3.你推薦什麼樣的乙狀結腸線形,ReLU? 4.你是什麼意思?把它們分享到SO? – Make42
2.爲什麼我應該使用ReLU而不是S形? – Make42
ReLU已被證明比S形更易於訓練。我建議你研究這個非常好的資源,以便在開發神經網絡方面取得成功。 deeplearningbook.org – fabrizioM