我已经在celebA数据集上训练了GAN。之后,我将G和D分开。然后,我从celebA训练数据集中挑选一幅图像,比方说yTrue,现在我希望找到G可以生成的最接近yTrue的图像,比方说yPred。因此G的输出损失是||yTrue - yPred||_2^{2},我最小化了它w.r.t生成器输入(正态分布的潜变量)。下面是给出好结果的代码。现在的问题是,我还想在第一行添加先验损失( 1 (1-D(G(Z),但是我不知道怎么做,因为D现在没有连接到G,如果我在第一行直接添加k.mean(k.log(1-D.1(G.output),它会返回不允许的数值数组而不是张量。
`loss = K.mean(K.square(yTrue - gf.output))
grad = K.gradients(loss,[gf.input])[0]
fn = K.function([gf.input], [grad])
generator_input = np.random.normal(0,1,[1,100])
for i in range(5000):
grad1 = fn([generator_input])
generator_input -= grads[0]*.01
recovered = gf.predict(generator_input)` 发布于 2017-10-12 01:26:47
在keras中,您可以获得最终输出以创建损失函数。然后,你将不得不训练整个网络来实现这种损失。(Train G+D作为单个模型加入)。
在损失函数中,您将使用y_true和y_pred,并使用它们进行比较:
PS:如果MSE没有接受鉴别器的输出,请更详细地说明您的问题。
import keras.backend as K
def customLoss(yTrue,yPred):
mse = K.mean(K.square(yTrue-yPred)
prior = K.mean(K.log(1-yPred))
return mse + prior编译模型时传递此函数
discriminator.compile(loss=customLoss,optimizer=.....)https://stackoverflow.com/questions/46690696
复制相似问题