乘以tf.range()的优雅方法

时间:2018-08-21 15:16:48

标签: python tensorflow

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

3
4
2
.
.
.
2

从每个数字开始,我需要创建一个新的张量,从数字开始直到数字9为止。 例如,为3 i创建一个张量:

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

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

欢迎提出任何有关优雅解决方案的想法。

1 个答案:

答案 0 :(得分:1)

您可以使用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)