比较具有不同尺寸的张量

时间:2019-04-05 22:42:23

标签: tensorflow

我有两个张量不同的张量。说张量A的尺寸为(1,3),张量B的尺寸为(1, 5)

A = [a1, a2, a3]
B = [b1, b2, b3, b4, b5]

这些值之间有一个已知的分组。例如,b1b2对应于a1b3对应于a2b4b5对应于{ {1}}。我想计算这些张量之间的差异。 所以我想要张量a3为:

C

为此,我必须将C = [b1-a1, b2-a1, b3-a2, b4-a3, b5-a3] 转换为:

A

然后我可以计算A = [a1, a1, a2, a3, a3]

是否有一种通过将给定张量的值复制给定次数来创建新张量的方法? 例如,我可以提供数组/张量C来指示[2, 1, 2]中的每个元素应重复多少次。

我尝试使用A,但它在维级别运行,并且无法复制张量的值。

tf.tile似乎是修改张量值的好方法。但是我无法使其在上述情况下正常工作。

我尝试过这样的事情:

tf.map_fn

但无法找出k=(tf.constant([1,2]), tf.constant([2,3])) z=tf.map_fn(lambda x: [code here to duplicate elements in x[0] by x[1] times], k, dtype=tf.int32)

1 个答案:

答案 0 :(得分:0)

您不需要使用tf.map_fn。向量化可以通过组合tf.sequence_masktf.boolean_mask来实现。

import tensorflow as tf

A = tf.constant([1,2,3])
indic = tf.constant([2,1,2])

max_length = tf.reduce_max(indic,axis=0)
# 2
new_A = tf.tile(tf.expand_dims(A,1),[1,max_length])
# [[1 1]
#  [2 2]
#  [3 3]]
mask = tf.sequence_mask(indic,max_length)
# [[ True  True]
#  [ True False]
#  [ True  True]]
result = tf.boolean_mask(new_A,mask)

with tf.Session() as sess:
    print(sess.run(result))

[1 1 2 3 3]