python - 添加带有偏移量的张量

标签 python tensorflow

例子, 我有一个二维张量。

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]

是否可以有效地执行这种计算?我尝试使用 SparseTensortf.sparse_reduce_sum 计算稀疏表示的总和,但发现它对我的数据大小而言计算效率低下。

最佳答案

您可以手动构建移动总和图:

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))

张量也可以是占位符,但必须事先知道其形状。

关于python - 添加带有偏移量的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045354/

相关文章:

c# - Python在控制台应用程序中执行外部Python脚本

python - 使用 pyparsing 解析带后缀的表达式

python - 如何将 3D 散点投影到 xy 平面上?

tensorflow - CNN 损失停留在 2.302 (ln(10))

android - 在 Android 上保持 TensorFlow 模型加密

python - 内部 Keras 模型中的多个嵌入层问题

python - 如何在python中通过LSTM获得对新数据的预测

python - wxPython:退出全屏

tensorflow - 连接两个图

python - TensorFlow 中的损失是如何计算的?