我需要遍历第一个维度,其长度是可变的,如何实现这一点?如果不可能,有没有其他解决方法?
回答:
tf.unstack
沿着动态维度是不支持的:
如果
value.shape[axis]
未知,将引发 ValueError 错误。
但是,您可以尝试使用 tf.while_loop
来遍历张量的切片。这里有一个计算总和的示例:
# 输入张量:尝试沿着 axis=0 进行迭代x = tf.placeholder(dtype=tf.float32, shape=[None, 3])batch_size = tf.shape(x)[0]def cond(x, i, _): return i < batch_sizedef body(x, i, x_prev): # 对 `x_prev` 和 `x[i]` 进行一些操作。这里我们只是将切片相加 sum = x_prev + x[i] return x, i + 1, sum# 这意味着:从 0 开始,应用 body,只要 `cond` 为真_, _, c = tf.while_loop(cond, body, (x, 0, tf.zeros([3])))# 测试它with tf.Session() as sess: data = np.arange(12).reshape([4, 3]) print(data) result = sess.run(c, feed_dict={x: data}) print(result)
输出:
[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]][ 18. 22. 26.]