J'ai modèle A (autoencoder) qui prend en entrée un lot d'images A_IN (images originales), et délivre un lot d'images A_OUT (images reconstruites). Ensuite, j'ai le modèle B (classificateur binaire) qui prend en entrée un lot d'images B_in, qui est un mélange de A_in et A_out.Comment connecter deux modèles
Je veux faire la distinction entre B et A_IN A_OUT, pour voir si A est en train de faire un bon travail reconstruction d'images. B_out est une probabilité qu'une image donnée soit A_in.
trains B en parallèle avec une de classer les deux types d'images. B_loss = (B_out - étiquette). Les étiquettes sont 0 ou 1 (original ou reconstruit). Lorsque nous optimisons B_loss, nous ne mettons à jour que les paramètres B. Je veux former le modèle A afin qu'il optimise une fonction de perte combinée: Combined_Loss = erreur de reconstruction (A_out - A_in) - erreur de classification (B_out - label), de sorte qu'il tente de reconstruire les images et de tromper B au niveau de la en même temps. Ici, je veux seulement mettre à jour les paramètres A (nous ne voulons pas aider B ici).
Maintenant, ma question porte sur la construction de ce mélange de A_IN et A_OUT, et l'alimentation à B, de sorte que les graphiques A et B sont connectés.
En ce moment, il est comme ça:
A_out = autoencoder(A_in: orig_images)
B_out = classifier(B_in: numpy(mix(A_in, A_out))
Comment définir comme ceci:
A_out = autoencoder(A_in: orig_images)
B_out = classifier(mix(A_out, A_in))
Alors que lorsque je forme A et B en même temps:
sess.run([autoencoder_train_op, classifier_train_op], feed_dict=
{A_in: orig_images, B_in: classifier_images, labels: classifier_labels})
Je n'aurais pas besoin de B_in placeholder (les graphiques seraient connectés)?
Voici mon code Numpy qui construit classifier_images (mélange (A_IN, A_OUT)):
reconstr_images = sess.run(A_out, feed_dict={A_in: orig_images})
half_and_half_images = np.concatenate((reconstr_images[:batch_size/2], orig_images[batch_size/2:]))
half_and_half_labels = np.zeros(labels.shape)
half_and_half_labels[batch_size/2:] = 1
random_indices = np.random.permutation(batch_size)
classifier_images = half_and_half_images[random_indices]
classifier_labels = half_and_half_labels[random_indices]
Comment puis-je convertir en noeud tensorflow?
Y a-t-il un problème spécifique auquel vous êtes confronté en convertissant ce code en tf? Il semble que ce soit du code assez simple qui devrait être faisable en utilisant 'tf.concat',' tf.zeros', 'tf.random_shuffle', etc. Aussi, je ne suis pas sûr de savoir pourquoi vous avez besoin de mélanger du tout. Vraisemblablement, les différentes images alimentées en même temps sont juste pour le traitement par lots et sont traitées indépendamment. Si c'est le cas, vous ne devriez pas avoir besoin de mélanger, à moins que votre taille de lot soit grande et que vous souhaitiez la mélanger pour de meilleures trajectoires d'optimisation. – iga
Bon point sur le brassage - ce n'est pas nécessaire.Cependant cela ne change pas la question principale: comment convertir classifier (B_in: numpy (mix (A_in, A_out)) en classifier (mix (A_out, A_in)) pour que les deux graphes soient connectés? – MichaelSB
je vois. Je vais essayer de répondre avec une réponse – iga