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)

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

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如何在保持批量大小维度的同时屏蔽掉不需要的值?被屏蔽的张量应该有 shape (?, 500, 3, 2, 2, 14)

keras 或 numpy 中的答案也很简洁,虽然知道如何在 numpy 中解决问题并不能解决我的问题,但我仍然想知道。

4

1 回答 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。

于 2017-12-24T23:26:40.080 回答