首页 文章

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

提问于
浏览
0

想象一下,我有一个形状张量 (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 的索引,我有两个问题:

1)我想从 tensor2 构建 tensor1 形状 (?, 500, 3, 2, 2, 69) 的掩码 . 例如, tensor2 的最后一个轴的可能行将是 [1,8,3,68,2,4,58,19,20,21,26,48,56,11] ,但由于 tensor2 是从 tensor1 构造的,因此新输入的这些索引会有所不同 . 这些是必须保持 tensor1 的最后一个轴的索引 . 其他一切都必须掩盖 .

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

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

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 .

相关问题