TypeError:输入'ref'的'Assign'Op需要输入l值

时间:2017-05-27 19:24:59

标签: python tensorflow

我是TensorFlow的初学者,所以我只想尝试运行Fibonacci算法。

到目前为止,我写了这段代码:

a=tf.constant(1)
b=tf.Variable(1)
print(a)
print(b)

with tf.Session() as session:
    init_op = tf.initialize_all_variables()
    session.run(init_op)
    for i in range(0, 10):
        sum_value = tf.add(a, b)
        assign_op1=tf.assign(a, b)
        assign_op2=tf.assign(b, sum_value)
        session.run(assign_op1)
        session.run(assign_op2)
        print(sum_value)

对于它,我收到此错误消息:

   Tensor("Const_11:0", shape=(), dtype=int32)

<tensorflow.python.ops.variables.Variable object at 0x7f0d446cfbd0>

TypeErrorTraceback (most recent call last)
<ipython-input-32-25b7f828d7c6> in <module>()
     10     for i in range(0, 10):
     11         sum_value = tf.add(a, b)
---> 12         assign_op1=tf.assign(a, b)
     13         assign_op2=tf.assign(b, sum_value)
     14         session.run(assign_op1)

/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_state_ops.pyc in assign(ref, value, validate_shape, use_locking, name)
     38   return _op_def_lib.apply_op("Assign", ref=ref, value=value,
     39                               validate_shape=validate_shape,
---> 40                               use_locking=use_locking, name=name)
     41 
     42 

/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.pyc in apply_op(self, op_type_name, name, **keywords)
    515             raise TypeError(
    516                 "Input '%s' of '%s' Op requires l-value input" %
--> 517                 (input_name, op_type_name))
    518           input_types.extend(types)
    519         else:

TypeError: Input 'ref' of 'Assign' Op requires l-value input

代码有什么问题?

1 个答案:

答案 0 :(得分:1)

在行tf.assign(a, b)中,您指示Tensorflow将b的值分配给变量a。但是,您在第一行中将a声明为tf.constant - 并且您无法为常量指定新值。正如Tensorflow所写,'Assign' Op的第一个参数需要 l-value input ,换句话说,需要修改的东西。常量不是l值输入,而是r值输入。

如果您用a=tf.Variable(1)替换第一行,那么您将拥有一个可以成功执行的程序。