Tensorflow: Comment remplacer un nœud dans un calcul graphique?
Si vous avez deux graphes disjoints, et que vous voulez le lien, tourner à ceci:
x = tf.placeholder('float')
y = f(x)
y = tf.placeholder('float')
z = f(y)
dans cette:
x = tf.placeholder('float')
y = f(x)
z = g(y)
Est-il un moyen de le faire? Il semble que cela pourrait faciliter la construction dans certains cas.
Par exemple, si vous avez un graphique qui a l'image d'entrée comme un tf.placeholder
, et vous voulez optimiser l'image d'entrée, profonde de rêve style, est-il un moyen de remplacer l'espace réservé avec un tf.variable
nœud? Ou vous avez à penser qu'avant de construire le graphe?
Vous devez vous connecter pour publier un commentaire.
TL;DR: Si vous pouvez définir les deux calculs de fonctions Python, vous devriez le faire. Si vous ne pouvez pas, il y a des fonctionnalités plus avancées dans TensorFlow pour sérialiser et importer des graphiques, qui vous permet de créer des graphiques à partir de différentes sources.
Un moyen de le faire dans TensorFlow est de construire le disjoints calculs distincts
tf.Graph
objets, puis de les convertir à sérialisé protocole de tampons à l'aide deGraphique.as_graph_def()
:Ensuite, vous pouvez composer
gdef_1
etgdef_2
dans un troisième graphique, à l'aide detf.import_graph_def()
:tf.train.AdamOptimizer().minimize(tf.nn.l2_loss(z-x))
? Je reçois quelque chose commeNo variables to optimize
vars = op.outputs[0] for op in tf.get_default_graph().get_operations() if op.type == "Variable"]
puis passervar_list=vars
àminimize()
.y = f(input)
j'ai essayé simples à l'aide d'untf.mul(w, input)
oùw ~ N(0, 0.01)
[c'est à dire un tf.Variable]. À l'aide de la collection de variables, je ne voisw
être recueillies, mais toujours ce message d'erreur:TypeError: Argument is not a tf.Variable: Tensor("import/w:0", dtype=float32_ref)
Si vous souhaitez combiner formés modèles (par exemple de réutiliser des parties d'un modèle de pré-entraîné dans un nouveau modèle), vous pouvez utiliser un
Saver
pour enregistrer un point de contrôle sur le premier modèle, puis restaurer que le modèle (entièrement ou partiellement) dans un autre modèle.Par exemple, disons que vous voulez réutiliser le modèle 1 de poids
w
dans le modèle 2, et aussi convertirx
à partir d'un espace réservé à une variable:Il s'avère que
tf.train.import_meta_graph
passe tous les arguments supplémentaires pour le sous -import_scoped_meta_graph
qui a leinput_map
argument et utilise quand il arrive à sa propre (interne) invocation deimport_graph_def
.Il n'est pas documentée, et m'a pris sa réputation toooo beaucoup de temps pour le trouver, mais ça fonctionne!
Exemple pratique:
référence LIEN