我想在张量流中获得向量的n累加和。
import tensorflow as tf
input = tf.placeholder('float32', [None])
n = tf.placeholder('int32', ())
output = some_ops(input, n)
那是,
输入
input
= [1、3、5、8]n
= 2输出值
output
= [1 + 3、3 + 5、5 + 8、8]再举一个例子
输入
input
= [1,5,6,2,8,7,9]n
= 3输出值
output
= [1 + 5 + 6、5 + 6 + 2、6 + 2 + 8、2 + 8 + 7、8 + 7 + 9、7 + 9、9]some_ops
应该使用什么? 最佳答案
tf.while_loop
是此类功能的便捷功能。这是完整的工作代码:
import tensorflow as tf
input = tf.placeholder('float32', [None])
n = tf.placeholder('int32', ())
sess = tf.InteractiveSession()
tmp = tf.concat_v2([input,
tf.zeros(tf.expand_dims(n-1, 0),
dtype='float32')], axis=0)
i = tf.constant(0, dtype='int32')
output = tf.zeros([0], dtype='float32')
def body(i, output):
return i + 1, tf.concat_v2([output,
tf.expand_dims(tf.reduce_sum(tmp[i:i+n]), 0)],
axis=0)
i, output = tf.while_loop(lambda i, _: i < tf.shape(input)[0],
body,
[i, output],
shape_invariants=[tf.TensorShape([]),
tf.TensorShape([None])])
output.eval(feed_dict={n: 2, input:[1, 3, 5, 8]})
# array([ 4., 8., 13., 8.], dtype=float32)
output.eval(feed_dict={n: 3, input:[1,5,6,2,8,7,9]})
# array([ 12., 13., 16., 17., 24., 16., 9.], dtype=float32)