NameError: free variable 'ar' referenced before assignment in enclosing scope
NameError: free variable 'ar' referenced before assignment in enclosing scope
我在使用 tensorflow 的简单代码中使用 tf.while_loop。它给了我这个错误
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
NameError: free variable 'ar' referenced before assignment in enclosing scope
代码::
a = tf.constant([[[1,2],[4,3]],[[5,6],[8,7]]])
arg = tf.argmax(a, axis =2)
arg = tf.cast(tf.reshape(arg,[4]), tf.int32)
i =tf.constant(0)
c = lambda i: tf.less(i,4)
def body(i):
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
print(i)
i = tf.add(i,1)
return i
ar = tf.constant([1])
r = tf.while_loop(c,body,[i])
sess =tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(r)
print(sess.run(ar))
添加
global ar
上一行
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
在body
函数中
我在使用 tensorflow 的简单代码中使用 tf.while_loop。它给了我这个错误
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
NameError: free variable 'ar' referenced before assignment in enclosing scope
代码::
a = tf.constant([[[1,2],[4,3]],[[5,6],[8,7]]])
arg = tf.argmax(a, axis =2)
arg = tf.cast(tf.reshape(arg,[4]), tf.int32)
i =tf.constant(0)
c = lambda i: tf.less(i,4)
def body(i):
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
print(i)
i = tf.add(i,1)
return i
ar = tf.constant([1])
r = tf.while_loop(c,body,[i])
sess =tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(r)
print(sess.run(ar))
添加
global ar
上一行
ar = tf.cond(tf.less(arg[i], 1), lambda: tf.concat([ar,[1.0]], axis = 0), lambda: tf.concat([ar,[0.0]], axis = 0))
在body
函数中