如果只给出最后一个轴的索引,如何有效地屏蔽张量流中的张量?

问题描述 投票:0回答:1

想象一下,我有一个形状的张量(batch_size, a, ... , c, d, e)其中是a,...,c,d,e是定义的整数。例如(batch_size, 500, 3, 2, 2, 69)(batch_size, 2, 2)

我的问题是所有的张量,但让我们坚持tensor1.get_shape() = (?, 500, 3, 2, 2, 69)的例子

鉴于我有tensor2tensor2.get_shape() = (?, 500, 3, 2, 2, 14)包含tensor1最后轴的索引,我有2个问题:

1)我想从tensor1(?, 500, 3, 2, 2, 69)形状的tensor2构建一个面具。例如,tensor2沿着最后一个轴的可能行将是[1,8,3,68,2,4,58,19,20,21,26,48,56,11],但由于tensor2是从tensor1构造的,因此这些指数因新输入而异。这些是tensor1必须保留的最后一个轴的索引。其他一切都必须掩盖。

2)鉴于我有(?, 500, 3, 2, 2, 69)形状tensor1的面具,如何在保持批量大小的同时屏蔽不需要的值?掩盖的张量应该有形状(?, 500, 3, 2, 2, 14)

在keras或numpy的答案也会很整洁,虽然知道如何在numpy中做到这一点并不能解决我的问题,我仍然想知道。

tensorflow keras mask keras-2
1个回答
0
投票

回答1:tf.gather_nd(mask, [tf.range(tf.shape(tensor1)[0])[:,None, None, None, None, None],tf.range(tf.shape(tensor1)[1])[:,None, None, None, None],tf.range(tf.shape(tensor1)[2])[:,None, None, None],tf.range(tf.shape(tensor1)[3])[:,None, None],tf.range(tf.shape(tensor1)[4])[:,None],tensor2])

可能没有解决方案2.我会尝试pytorch。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.