我尝试使用while_循环 in 张量流,但是当我尝试返回目标时output从 while 循环中可调用,它给了我一个错误,因为形状每次都会增加。
输出应包含(0 或 1)值,基于data值(输入数组)。如果data值大于5返回1否则返回0。返回值必须添加到output
这是代码::
import numpy as np
import tensorflow as tf
data = np.random.randint(10, size=(30))
data = tf.constant(data, dtype= tf.float32)
global output
output= tf.constant([], dtype= tf.float32)
i = tf.constant(0)
c = lambda i: tf.less(i, 30)
def b(i):
i= tf.add(i,1)
cond= tf.cond(tf.greater(data[i-1], tf.constant(5.)), lambda: tf.constant(1.0), lambda: tf.constant([0.0]))
output =tf.expand_dims(cond, axis = i-1)
return i, output
r,out = tf.while_loop(c, b, [i])
print(out)
sess= tf.Session()
sess.run(out)
错误::
r, out = tf.while_loop(c, b, [i])
ValueError:两个结构体的元素数量不同。
第一个结构(1个元素):[tf.Tensor 'while/Identity:0' shape=()
数据类型=int32]
第二个结构(2个元素):[tf.Tensor 'while/Add:0' shape=()
dtype=int32,tf.Tensor 'while/ExpandDims:0' 形状=未知
dtype=float32>]
I use 张量流-1.1.3 and python-3.5
如何更改我的代码以获得目标结果?
EDIT::
我根据 @mrry 答案编辑代码,但仍然存在输出错误答案的问题
输出是数字求和
a = tf.ones([10,4])
print(a)
a = tf.reduce_sum(a, axis = 1)
i =tf.constant(0)
c = lambda i, _:tf.less(i,10)
def Smooth(x):
return tf.add(x,2)
summ = tf.constant(0.)
def b(i,_):
global summ
summ = tf.add(summ, tf.cast(Smooth(a[i]), tf.float32))
i= tf.add(i,1)
return i, summ
r, smooth_l1 = tf.while_loop(c, b, [i, smooth_l1])
print(smooth_l1)
sess = tf.Session()
print(sess.run(smooth_l1))
输出是6.0(错误的)。