如何实现纸张的损失功能'语义图像修复与深度生成模型'在keras

时间:2017-10-11 14:21:14

标签: keras

我在celebA数据集上训练了GAN。之后我将G和D分开。然后我从celebA训练数据集中选择一个图像说yTrue,现在我想找到最接近yTrue的图像,G可以生成yPred。所以G输出的损失是|| yTrue - yPred || _2 ^ {2}并且我最小化它w.r.t生成器输入(来自正态分布的潜变量)。下面是给出好结果的代码。现在的问题是我想在第一行添加先前的丢失(log(1-D(G(z)))1,但我没有得到如何做,因为D现在没有连接到G如果我直接在第一行添加k.mean(k.log(1-D.predict(G.output))),则返回numpy数组而不是不允许的张量。

    `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)` 

1 个答案:

答案 0 :(得分:0)

在keras中,您将获得最终输出以创建损失函数。然后,您将必须训练整个网络以实现该损失。 (训练G + D作为单一模型加入)。

在损失功能中,您将拥有y_truey_pred,并使用它们进行比较:

PS:如果MSE未获取鉴别器的输出,请更好地详细说明您的questoin。

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=.....)