问题
我想扫描类似于Tensorflow的 tf.scan()
的矩阵,但是一次使用多行 . 所以给定一个 [n, m]
矩阵,我希望能够从 i + j
到 m
迭代 m
行( n
个元素),给出 m - j
形状切片 [i - j, n]
.
怎么能实现这一目标?
我知道 tf.scan
如何做这样的事情,返回每次迭代的累积值 . 但我不认为移动矩阵会因为多个输入解决了这个问题,因为具有偏移的值无法预先计算 .
示例
举一个 n = 3
和 m = 5
的例子,假设我有一个如下所示的矩阵:
# [[1 0 0]
# [1 1 0]
# [0 0 0] row 3
# [0 0 0] row 4
# [0 0 0]] row 5
matrix_shape = [5, 3]
matrix_idx = tf.constant([[0, 0], [1, 0], [1, 1]])
matrix = tf.scatter_nd(matrix_idx,
tf.ones(tf.shape(matrix_idx)[0],
dtype=tf.int32),
matrix_shape)
我想从第3行到第5行应用以下函数:
# [[ 1 0 0] ┌ a
# [ 1 1 0] ├ b
# [ 6 4 2] <─┴ output / current line
# [16 12 6]
# [46 34 18]]
def compute(x):
a = x[0]
b = x[1]
return (a + b + 1) * 2
Tensorflow是否具有针对此问题的特定功能?
1 回答
我写的以下代码完全符合我的要求 .
这里重要的部分是
tf.scan
使用的函数return
,它不仅返回当前计算c
,还返回上一步b
中的行 . 因此,重要的是稍后通过仅使用[1]
选择此列表中的后期张量来从computation
中切除这些过量 .由于我还缺乏经验:可能这个解决方案对性能有害,因为函数返回一个元组,因此没有使用Tensorflow的速度优化?