2017-10-11 3 views
0

J'ai formé GAN sur l'ensemble de données celebA. Après cela, je sépare G et D. Puis je prends une image de celebA jeu de données de formation disons yTrue et maintenant je veux trouver l'image la plus proche de yTrue que G peut générer dire yPred. Donc, la perte en sortie de G est || yTrue - yPred || _2^{2} et je l'ai minimisée avec l'entrée du générateur (variable latente de la distribution normale). Voici un code qui donne de bons résultats. Maintenant, le problème est que je veux aussi ajouter une perte antérieure (log (1-D (G (z))) 1 en première ligne mais je ne comprends pas comment le faire car D n'est pas connecté à G maintenant et si j'ajoute directement k.mean (k.log (1-D.predict (G.output))) en première ligne, il retourne un tableau numpy pas tenseur non autorisé.comment mettre en œuvre la fonction de perte de papier '' Semantic Image Inpainting avec Deep Generative Models 'dans keras

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

Répondre

0

en keras, vous obtenez la sortie finale créer des fonctions de perte Ensuite, vous devrez former le réseau complet pour réaliser cette perte. (Train G + D joint comme un seul modèle)

Dans la fonction de perte, vous aurez y_true et y_pred, et vous utilisez à comparer:

PS: si MSE ne prend pas la sortie du discriminateur, veuillez mieux détailler votre 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 

passe cette fonction lors de la compilation du modèle

discriminator.compile(loss=customLoss,optimizer=.....) 
+0

J'ai mis à jour la question. Veuillez jeter un coup d'oeil. – user398917

+0

Désolé, je dois y aller, je ne peux pas mettre à jour ma question jusqu'à lundi maintenant. Mais faites un modèle avec deux sorties, l'une de G, l'autre de D, gardez-les connectés, cependant. Utilisez une perte pour chaque sortie. –