我有两个张量不同的张量。说张量A
的尺寸为(1,3)
,张量B
的尺寸为(1, 5)
。
A = [a1, a2, a3]
B = [b1, b2, b3, b4, b5]
这些值之间有一个已知的分组。例如,b1
和b2
对应于a1
,b3
对应于a2
,b4
和b5
对应于{ {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)
答案 0 :(得分:0)
您不需要使用tf.map_fn
。向量化可以通过组合tf.sequence_mask
和tf.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]