首页 > 解决方案 > 优雅的乘法 tf.range()

问题描述

我有一个 (BatchSize X 1) 个数字的张量,介于 0 到 9 之间,例如:

3
4
2
.
.
.
2

我需要从每个数字创建一个新的张量,从数字开始并递减直到数字 - 9。例如,对于数字 3,我创建一个张量:

3 2 1 0 -1 -2 -3 -4 -5 -6

这可以使用单个来完成:

tf.range(3,3-9,1)

我需要为整个张量做这件事,以创建一个新的张量(按照上面的例子):

3 2 1 0 -1 -2 -3 -4 -5 -6
4 3 2 1 0 -1 -2 -3 -4 -5
2 1 0 -1 -2 -3 -4 -5 -6 -7
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
2 1 0 -1 -2 -3 -4 -5 -6 -7

一种选择是以迭代的方式进行,但这需要我将批量大小硬编码到循环中,我试图避免这种情况。

任何关于一个好的优雅解决方案的想法都将受到欢迎。

标签: pythontensorflow

解决方案


tf.range(10)您可以通过正确重塑张量来对张量进行外部减法:

import tensorflow as tf
tf.InteractiveSession()
a = tf.constant([3,4,2,2])

b = tf.reshape(a, (-1,1)) - tf.range(10)
b.eval()
#array([[ 3,  2,  1,  0, -1, -2, -3, -4, -5, -6],
#       [ 4,  3,  2,  1,  0, -1, -2, -3, -4, -5],
#       [ 2,  1,  0, -1, -2, -3, -4, -5, -6, -7],
#       [ 2,  1,  0, -1, -2, -3, -4, -5, -6, -7]], dtype=int32)

推荐阅读