python中feed_dict和list之间的区别

时间:2017-05-24 06:49:05

标签: python tensorflow

我想知道feed_dictlist之间的区别。我虽然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'

2 个答案:

答案 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, Wb是变量(或占位符,在您执行through sess.run`时提供它们后会起到变量的作用。)

此外,1-Y仅定义graph op。为了证明这一点,我在声明后立即通过addind print Yprint c修改了代码。

结果是

Tensor("Placeholder:0", shape=(?, 1), dtype=float32)
Tensor("sub:0", shape=(?, 1), dtype=float32)

如您所见,Y是占位符,但c是减法操作。

这是正常的,它的工作原理。如果你问的技术性是否可行,我不是百分百肯定,但他们可能会像运算符重载那样使它无缝化。

要看到它实际上是相同的,你也可以这样:

c2 = tf.subtract(1.0,Y)

有关详细信息,请参阅tf.subtractbroadcasting