2016-06-21 2 views
0

Betrachten Sie die Berechnung eines inneren Produkts im Tensorfluss als Beispiel. Ich habe versucht, die verschiedenen Möglichkeiten, in TensorFlow in Graphen zu referieren, zu untersuchen, wenn man sie in einer Sitzung mit Feed bewertet. Betrachten Sie den folgenden Code ein:Welche Datentypen können Sie als Schlüssel zum Einspeisen in TensorFlow angeben?

import numpy as np 
import tensorflow as tf 

M = 4 
D = 2 
D1 = 3 
x = tf.placeholder(tf.float32, shape=[M, D], name='data_x') # M x D 
W = tf.Variable(tf.truncated_normal([D,D1], mean=0.0, stddev=0.1)) # (D x D1) 
b = tf.Variable(tf.constant(0.1, shape=[D1])) # (D1 x 1) 
inner_product = tf.matmul(x,W) + b # M x D1 
with tf.Session() as sess: 
    sess.run(tf.initialize_all_variables()) 
    x_val = np.random.rand(M,D) 
    #print type(x.name) 
    #print x.name 
    name = x.name 
    ans = sess.run(inner_product, feed_dict={name: x_val}) 
    ans = sess.run(inner_product, feed_dict={x.name: x_val}) 
    ans = sess.run(inner_product, feed_dict={x: x_val}) 
    name_str = unicode('data_x', "utf-8") 
    ans = sess.run(inner_product, feed_dict={"data_x": x_val}) #doesn't work 
    ans = sess.run(inner_product, feed_dict={'data_x': x_val}) #doesn't work 
    ans = sess.run(inner_product, feed_dict={name_str: x_val}) #doesn't work 
    print ans 

Die folgenden Arbeiten:

ans = sess.run(inner_product, feed_dict={name: x_val}) 
ans = sess.run(inner_product, feed_dict={x.name: x_val}) 
ans = sess.run(inner_product, feed_dict={x: x_val}) 

aber die letzten drei:

name_str = unicode('data_x', "utf-8") 
ans = sess.run(inner_product, feed_dict={"data_x": x_val}) #doesn't work 
ans = sess.run(inner_product, feed_dict={'data_x': x_val}) #doesn't work 
ans = sess.run(inner_product, feed_dict={name_str: x_val}) #doesn't work 

nicht. Ich habe überprüft, warum Typ x.name war, aber es hat immer noch nicht funktioniert, auch wenn ich es in den Typ Python-Interpreter konvertiert, sagte es war. I documentation scheint zu sagen, dass die Tasten Tensoren sein müssen. Allerdings akzeptiert es x.name, während es kein Tensor ist (es ist ein <type 'unicode'>), weiß jemand, was los ist?


Ich kann die Dokumentation einfügen sagt, es braucht ein Tensor zu sein:

Das optionale feed_dict Argument kann der Anrufer den Wert von Tensoren in der Grafik außer Kraft zu setzen. Jeder Schlüssel in feed_dict kann eine der folgenden Typen sein:

Wenn der Schlüssel ein Tensor ist, kann der Wert ein Python-Skalar, String, Liste oder numpy ndarray, die als das auf den gleichen dtype umgewandelt werden können Tensor. Wenn der Schlüssel ein Platzhalter ist, wird die Form des Werts außerdem auf Kompatibilität mit dem Platzhalter überprüft. Wenn der Schlüssel ein SparseTensor ist, sollte der Wert ein SparseTensorValue sein. Jeder Wert in feed_dict muss in ein numpliges Array des dtype des entsprechenden Schlüssels konvertiert werden können.

Antwort

0

TensorFlow erwartet in erster Linie tf.Tensor Objekte als Schlüssel im Feed-Verzeichnis. Es akzeptiert auch eine Zeichenfolge (die bytes oder unicode sein kann), wenn es der .name -Eigenschaft von einigen tf.Tensor im Diagramm der Sitzung entspricht.

In Ihrem Beispiel x.name funktioniert, weil x ein tf.Tensor ist und Sie die Bewertung seiner .name Eigenschaft. "data_val" funktioniert nicht, weil es der Name einer tf.Operation ist (nämlich x.op) und nicht der Name einer tf.Tensor, die die Ausgabe eines tf.Operation ist. Wenn Sie x.name drucken, sehen Sie, dass es den Wert "data_val:0" hat, was "die 0. Ausgabe eines tf.Operation"data_val".

bedeutet
Verwandte Themen