TensorFlow: Comment s'assurer que les Tenseurs sont dans le même graphique
Je suis en train de commencer avec TensorFlow en python, la construction d'un simple feed-forward NN. J'ai une classe qui détient le réseau des poids (les variables sont mises à jour lors de train, et sont supposées rester constantes pour l'exécution) et un autre script pour former le réseau, qui obtient les données sur la formation, les sépare, les lots et les trains du réseau dans les lots.
Lorsque j'essaie de former le réseau, j'obtiens un message d'erreur indiquant que le tenseur de données n'est pas dans le même graphique que le NN tenseurs:
ValueError: Tenseur("espace Réservé:0", la forme=(10, 5), dtype=float32) doit être sur le même graphique que l'Tenseur("windows/embedding/Cast:0", la forme=(100232, 50), dtype=float32).
Les parties pertinentes dans la formation de script sont:
def placeholder_inputs(batch_size, ner):
windows_placeholder = tf.placeholder(tf.float32, shape=(batch_size, ner.windowsize))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
return windows_placeholder, labels_placeholder
with tf.Session() as sess:
windows_placeholder, labels_placeholder = placeholder_inputs(batch_size, ner)
logits = ner.inference(windows_placeholder)
Et pertinentes dans le réseau de la classe sont:
class WindowNER(object):
def __init__(self, wv, windowsize=3, dims=[None, 100,5], reg=0.01):
self.reg=reg
self.windowsize=windowsize
self.vocab_size = wv.shape[0]
self.embedding_dim = wv.shape[1]
with tf.name_scope("embedding"):
self.L = tf.cast(tf.Variable(wv, trainable=True, name="L"), tf.float32)
with tf.name_scope('hidden1'):
self.W = tf.Variable(tf.truncated_normal([windowsize * self.embedding_dim, dims[1]],
stddev=1.0 / math.sqrt(float(windowsize*self.embedding_dim))),
name='weights')
self.b1 = tf.Variable(tf.zeros([dims[1]]), name='biases')
with tf.name_scope('output'):
self.U = tf.Variable(tf.truncated_normal([dims[1], dims[2]], stddev = 1.0 / math.sqrt(float(dims[1]))), name='weights')
self.b2 = tf.Variable(tf.zeros(dims[2], name='biases'))
def inference(self, windows):
with tf.name_scope("embedding"):
embedded_words = tf.reshape(tf.nn.embedding_lookup(self.L, windows), [windows.get_shape()[0], self.windowsize * self.embedding_dim])
with tf.name_scope("hidden1"):
h = tf.nn.tanh(tf.matmul(embedded_words, self.W) + self.b1)
with tf.name_scope('output'):
t = tf.matmul(h, self.U) + self.b2
Pourquoi il y a deux graphiques en premier lieu, et comment puis-je m'assurer que les données de l'espace réservé tenseurs sont dans le même graphique que la NN?
Merci!!
OriginalL'auteur user616254 | 2016-10-27
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de créer tous les tenseurs sous le même graphique en faisant quelque chose comme ceci:
Vous pouvez en savoir plus sur les graphiques en TF ici:
https://www.tensorflow.org/versions/r0.8/api_docs/python/framework.html#Graph
C'est difficile à dire sans voir le code complet. Mais il semble probable que vous avez le code qui est en train de construire des opérateurs en dehors de la
with g.as_default()
portée, ou un peu de code que vous appelez est en train de construire son propre graphique. Pourriez-vous montrer plus de code? (Pour être honnête, la prochaine chose que je voudrais faire est d'essayer instrumentant le Tensorflow code Python qui génère des opérateurs et de l'impression de l'identité du graphique que chaque opérateur est ajouté.)OriginalL'auteur Yair
Parfois, lorsque vous obtenez une erreur comme cela, l'erreur (qui, souvent, peut être l'utilisation d'une mauvaise variable à partir d'un autre graphique) pourrait se produire beaucoup plus tôt, et propagées à l'opération qui a finalement jeté une erreur. Par conséquent, vous pourriez étudier uniquement cette ligne et de conclure que les tenseurs doit être de la même graphe, tandis que l'erreur de fait est ailleurs.
La façon la plus simple de vérifier est d'imprimer le graphique est utilisé pour chaque variable/op dans le graphique. Vous pouvez le faire simplement par:
OriginalL'auteur Bruno KM