2017-12-24 2 views
0

나는 텐서 형상을 가지고 있다고 가정한다. (batch_size, a, ... , c, d, e) 여기서 a, ..., c, d, e는 정수이다. 예 : (batch_size, 500, 3, 2, 2, 69) 또는 (batch_size, 2, 2).마지막 축의 인덱스가 주어진 경우에만 tensorflow의 tensors를 효율적으로 마스크하는 방법은 무엇입니까?

1) I :

내 질문은 모든 텐서입니다 만의 내가 tensor1의 마지막 축 tensor2tensor2.get_shape() = (?, 500, 3, 2, 2, 14)에 포함 된 지표를 감안할 때 tensor1.get_shape() = (?, 500, 3, 2, 2, 69)

의 예에 충실하게, 나는이 문제가 형태 (?, 500, 3, 2, 2, 69)tensor1에 대한 마스크를 tensor2에서 만들고 싶습니다. 예를 들어 tensor2에 대한 마지막 축을 따라 가능한 행은 [1,8,3,68,2,4,58,19,20,21,26,48,56,11]이지만 tensor2tensor1에서 구성되기 때문에 이러한 인덱스는 새 입력에 따라 다릅니다. 이것들은 유지되어야 할 마지막 축의 인덱스이며 tensor1입니다. 그 밖의 모든 것은 가려져야합니다.

2) tensor1에 대해 모양이 마스크 (?, 500, 3, 2, 2, 69)인데, 배치 크기 차원을 유지하면서 원치 않는 값을 마스크하는 방법은 무엇입니까? 마스크 된 텐서는 모양이 (?, 500, 3, 2, 2, 14)이어야합니다.

keras 또는 numpy의 답변도 numpy로 처리하는 방법을 알고 내 문제를 해결할 수는 없지만 여전히 알고 싶습니다.

답변

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])

내가 pytorch을 다할 것 2. 해결책은 아마 없다.

관련 문제