我想通过自己在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的损失?
任何帮助,高度赞赏:)