实施例, 我有一个二维张量。
array = np.array([1,2,3],[1,2,3],[1,2,3])
tensor = tf.constant(array)
我想计算张量中每列的总和,但要求每一行都偏离其他列。
[0,1,2,3,0,0]
[0,0,1,2,3,0]
[0,0,0,1,2,3]
是否可以有效地执行此类计算?我尝试使用SparseTensor
和tf.sparse_reduce_sum
计算稀疏表示的总和,但发现它对我的数据大小来说计算效率很低。
答案 0 :(得分:1)
您可以手动构建移位的总和图:
import tensorflow as tf
import numpy as np
array1 = np.array([[1., 2., 3.],
[1., 2., 3.],
[1., 2., 3.]], dtype=np.float32)
tensor1 = tf.Variable(tf.constant(array1))
array2 = np.array([[1., 2., 3., 4.],
[1., 2., 3., 4.],
[1., 2., 3., 4.],
[1., 2., 3., 4.]], dtype=np.float32)
tensor2 = tf.Variable(tf.constant(array2))
def shifted_sum(tensor):
def shifted_sum_one_column(i):
s = tf.constant(0., dtype=tf.float32)
for j in range(tensor.get_shape()[0]):
if 0 <= i - (j + 1) < tensor.get_shape()[1]:
s += tensor[tf.constant(j, dtype=tf.int32),
tf.constant(i - (j + 1), dtype=tf.int32)]
return s
result = []
for i in range(tensor.get_shape()[1] + tensor.get_shape()[0]):
result.append(shifted_sum_one_column(i))
result = tf.stack(result)
return result
shifted_tensor_1 = shifted_sum(tensor1)
shifted_tensor_2 = shifted_sum(tensor2)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(shifted_tensor_1))
print(sess.run(shifted_tensor_2))
张量也可以是占位符,但必须事先知道形状。