2017-05-27 3 views
0

Ich bin ein Anfänger mit TensorFlow so bin ich nur den Fibonacci-Algorithmus versucht, laufen.Typeerror: Input ‚ref‘ von ‚Assign‘ Op erfordert l-Wert Eingang

Bisher Ich schrieb diesen Code:

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) 

Denn es, ich diese Fehlermeldung bekommen:

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 

Was mit dem Code falsch?

Antwort

1

In der Zeile tf.assign(a, b) weisen Sie Tensorflow an, der Variablen a den Wert b zuzuweisen. Allerdings erklärt Sie a als tf.constant in der ersten Zeile - und Sie können keinen neuen Wert auf eine Konstante zuweisen. Wie Tensorflow schreibt, erfordert das erste Argument der 'Assign' Opl-Wert Eingang, oder in anderen Worten, etwas, das geändert werden kann. Eine Konstante ist keine l-Wert-Eingabe, sondern eine r-Wert-Eingabe.

Wenn Sie Ihre erste Linie mit a=tf.Variable(1) dann ersetzen Sie ein Programm, das erfolgreich ausgeführt wird.

Verwandte Themen