我想知道feed_dict
和list
之间的区别。我虽然Y是y_data
。
以下是代码:
import tensorflow as tf
x_data = [[1., 2.], [2., 3.], [3., 1.], [4., 3.], [5., 3.], [6., 2.]]
y_data = [[0], [0], [0], [1], [1], [1]]
Y = tf.placeholder(tf.float32, shape=[None, 1])
W = tf.Variable([[1.], [1.]])
b = tf.Variable([1.])
c = 1-Y
d = 1-y_data
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(c, feed_dict={Y: y_data}))
print(sess.run(d))
我收到如下错误:
d = 1-y_data
TypeError: unsupported operand type(s) for -: 'int' and 'list'
答案 0 :(得分:0)
这个问题与tensorflow无关。你有一堆tensorflow代码但不是这与你的错误有关。如果删除所有不相关的东西,你将得到一个简单的python:
y_data = [[0], [0], [0], [1], [1], [1]]
d = 1-y_data
显然不起作用,因为1是一个int,y_data是一个列表。
答案 1 :(得分:0)
您正在比较这篇文章中完全不同的对象。
这使你的问题有点无关紧要。
应该理解,每个使用Tensorflow的计算必须出现在您通过tf.placeholder,tf.Variable或通过所谓的'graph ops'绑定它们的其他函数创建的图形中。
在此上下文中,Y, W
和b
是变量(或占位符,在您执行through
sess.run`时提供它们后会起到变量的作用。)
此外,1-Y
仅定义graph op
。为了证明这一点,我在声明后立即通过addind print Y
和print c
修改了代码。
结果是
Tensor("Placeholder:0", shape=(?, 1), dtype=float32)
Tensor("sub:0", shape=(?, 1), dtype=float32)
如您所见,Y
是占位符,但c
是减法操作。
这是正常的,它的工作原理。如果你问的技术性是否可行,我不是百分百肯定,但他们可能会像运算符重载那样使它无缝化。
要看到它实际上是相同的,你也可以这样:
c2 = tf.subtract(1.0,Y)
有关详细信息,请参阅tf.subtract和broadcasting。