我想通過自己在TensorFlow搭建一個MNIST DCGAN。但是,我正在努力研究如何爲發生器設置損失函數。在Keras DCGAN implementation中,作者爲這個問題使用了一個「解決方法」:他只是建立了3個模型。發電機(G),鑑別器(D)和第三個,他只是將G與D結合在一起,同時將D的訓練能力設置爲假。TensorFlow MNIST DCGAN:如何設置丟失功能?
這樣,他可以向D提供真實圖像+生成的圖像以訓練D並訓練G + D組合模型,因爲D的損失傳播到G,因爲D不能在G + D中訓練組合模型。
在TensorFlow,我已經建立了G和d了。培訓d是比較簡單的,因爲我只需要一批真正MNIST訓練圖像的使用產生不耽誤,並調用培訓OP:
session.run(D_train_op,
feed_dict={x: batch_x, y: batch_y})
在這個例子中訓練運算是一個二元cross entropy:
tf.losses.softmax_cross_entropy(y, D_out)
...但我怎麼會設置爲G中的損失函數,當我沒有「堆疊」模式,「G和d」相結合,單一的,第三種模式?
我知道我必須用G生成一批圖像,將它們送入D,然後我可以獲得D的損失...但是,G的輸出形狀爲(batch_size, 28, 28, 1)
。我如何爲手動設置G的損失函數?
沒有「G和d」 -combined模式「的解決方法」對於這一點,我必須傳播d的損耗,其具有(batch_size, 1)
輸出形狀G.
若G會例如做一些分類,這不會很難弄清楚......但是G輸出圖像。因此,我不能直接d的損失映射到G.
的輸出層是否必須成立第三模型組合G + d?或者有什麼方法可以手動計算G的損失?
任何幫助,高度讚賞:)