tensorflow mask 씌우기

2019. 5. 30. 08:42분석 Python/Tensorflow

오늘은 결과물에서 특정 부분에 대해서 mask를 씌울 일이 있어서, 

인터넷에 찾아봐도 잘 나오지 않아서 stackoverflow에 물어보니 답이 나와서 정리해서 코드를 보여주려고 한다.

 

mask를 씌우는 이유는 머랄까 maxpooling처럼 실제로 쓰는 부분에 대해서만 Gradient를 주고 싶어서 하려고 한다.

 

물론 아예안하고 할 수도 있는데 왜 굳이 mask를 씌우냐고 할 수 있지만, 실제 자료가 [10000 , 10]이런 거여서 

여러 가지 shape 바꿔주고 해서 [10000, 3, 4, 1]로 바꾸려고 한다. 

그러다 보니 2개 정도 마스크를 씌워야 했다.

 

G = generator(Z) ## [ None , 3, 4, 1]
masking = tf.sequence_mask([4, 4, 2], maxlen=4, dtype=tf.float32) ## [3,4]
masking2 = tf.expand_dims(masking,axis = 0) ## [1, 3,4]
masking2 = tf.expand_dims(masking2,axis = -1) ## [1, 3,4 , 1]
mask = tf.tile(masking2, [batch_size, 1 , 1,1]) ## ## [batch_size, 3,4 , 1]
G = G * mask

## 끝

 

이렇게하면 실제 결과를 봐도 mask가 씌워져서 0이 나오는 것을 알 수 있다.

728x90