我正在 Tensorflow 中為 MNIST 數(shù)據(jù)集試驗(yàn) VAE 實(shí)現(xiàn)。首先,我訓(xùn)練了一個(gè)基于 MLP 編碼器和解碼器的 VAE。它訓(xùn)練得很好,損失減少了,它生成了看似合理的數(shù)字。下面是這個(gè)基于 MLP 的 VAE 解碼器的代碼:x = sampled_zx = tf.layers.dense(x, 200, tf.nn.relu)x = tf.layers.dense(x, 200, tf.nn.relu)x = tf.layers.dense(x, np.prod(data_shape))img = tf.reshape(x, [-1] + data_shape)下一步,我決定添加卷積層。只改變編碼器工作得很好,但是當(dāng)我在解碼器(而不是 fc 層)中使用反卷積時(shí),我根本沒(méi)有得到任何訓(xùn)練。損失函數(shù)永遠(yuǎn)不會(huì)減少,輸出總是黑色的。這是反卷積解碼器的代碼:x = tf.layers.dense(sampled_z, 24, tf.nn.relu)x = tf.layers.dense(x, 7 * 7 * 64, tf.nn.relu)x = tf.reshape(x, [-1, 7, 7, 64])x = tf.layers.conv2d_transpose(x, 64, 3, 2, 'SAME', activation=tf.nn.relu)x = tf.layers.conv2d_transpose(x, 32, 3, 2, 'SAME', activation=tf.nn.relu)x = tf.layers.conv2d_transpose(x, 1, 3, 1, 'SAME', activation=tf.nn.sigmoid)img = tf.reshape(x, [-1, 28, 28])這看起來(lái)很奇怪,代碼對(duì)我來(lái)說(shuō)看起來(lái)很好。我把它縮小到解碼器中的反卷積層,那里有一些東西打破了它。例如,如果我在最后一次解卷積后添加一個(gè)全連接層(即使沒(méi)有非線性?。挚梢怨ぷ髁?!這是代碼:x = tf.layers.dense(sampled_z, 24, tf.nn.relu)x = tf.layers.dense(x, 7 * 7 * 64, tf.nn.relu)x = tf.reshape(x, [-1, 7, 7, 64])x = tf.layers.conv2d_transpose(x, 64, 3, 2, 'SAME', activation=tf.nn.relu)x = tf.layers.conv2d_transpose(x, 32, 3, 2, 'SAME', activation=tf.nn.relu)x = tf.layers.conv2d_transpose(x, 1, 3, 1, 'SAME', activation=tf.nn.sigmoid)x = tf.contrib.layers.flatten(x)x = tf.layers.dense(x, 28 * 28)img = tf.reshape(x, [-1, 28, 28])在這一點(diǎn)上我真的有點(diǎn)卡住了,有沒(méi)有人知道這里可能會(huì)發(fā)生什么?我使用 tf 1.8.0,Adam 優(yōu)化器,1e-4 學(xué)習(xí)率。
1 回答

隔江千里
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
可能是您在最終的 deconv 層中使用了 sigmoid 將輸出限制為 0-1,您不在基于 MLP 的自動(dòng)編碼器中這樣做,或者在 deconvs 后添加完全連接時(shí)可能會(huì)出現(xiàn)數(shù)據(jù)范圍問(wèn)題?
添加回答
舉報(bào)
0/150
提交
取消