un “gel” de certaines variables/étendues dans tensorflow: stop_gradient vs passer des variables à minimiser

Je suis en train de mettre en œuvre Contradictoire NN, ce qui nécessite de "geler" l'une ou l'autre partie du graphique des cours de formation en alternance minibatches. I. e. il y a deux sous-réseaux: G et D.

G( Z ) ->  Xz
D( X ) ->  Y

où la perte de la fonction de G dépend D[G(Z)], D[X].

J'ai d'abord besoin de former des paramètres D avec tous les G paramètres fixes, puis paramètres dans G avec les paramètres D fixe. La perte de fonction dans le premier cas sera négatif de la perte de fonction dans le second cas, et la mise à jour devra appliquer les paramètres de savoir si la première ou de la deuxième sous-réseau.

J'ai vu que tensorflow a tf.stop_gradient fonction. Pour les fins de la formation de la D (en aval) de sous-réseau que je peux utiliser cette fonction pour bloquer le flux de gradient de

 Z -> [ G ] -> tf.stop_gradient(Xz) -> [ D ] -> Y

La tf.stop_gradient est très succinctement annoté avec aucun exemple de ligne (et l'exemple seq2seq.py est trop long et pas facile à lire), mais regarde comme il doit être appelée lors de la création graphique. N'implique que si je veux bloquer/débloquer les flux de gradient en alternant les lots, j'ai besoin de re-créer et re-initialiser le modèle des graphes?

Aussi, il semble que on ne peut pas bloquer le gradient qui coule à travers le G (en amont) le réseau par le biais de tf.stop_gradient, droit?

Comme une alternative, j'ai vu que l'on peut passer à la liste des variables à l'optimiseur d'appel comme opt_op = opt.minimize(cost, <list of variables>), ce qui serait une solution de facilité si l'on peut obtenir toutes les variables dans la portée de chaque sous-réseau. Peut-on obtenir un <list of variables> pour un tf.portée?

InformationsquelleAutor Dima Lituiev | 2016-02-09