[210113 TIL] Tensorflow Masking, Mini-Batch with similar size

602go·2021년 1월 13일
0

Deep Learning

목록 보기
3/17
post-thumbnail

1 Day 1 Commit Project (github repository)

Today I Learned

written by 602



1. How to implement Masking in Tensorflow 2.x

seq2seq regression(text2keypoing)에서 zero-padding된 프레임의 영향을 줄이기 위해
Masking을 도입하여, 패딩된 프레임은 손실함수 계산 등의 학습 과정에서 제외되도록 해준다.
Pytorch에서 구현된 코드는 여러 번 보았지만 Tensorflow는 상대적으로 자료가 적다.
Tensorflow 공식문서 를 참고하여 tacotron 모델에 masking 추가하기 완료!

  • 인코더나 디코더가 embedding layer로 시작해서 input을 모델 끝까지 쭉 전달해주는 것이라면 layers.Embedding에서 mask_zero=True만 추가하면 된다.
    • ex) layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)
  • 다만, 중간에 output이 concat되는 등 masking할 영역이 바뀌는 경우에는 해당 layer에서 마스크를 새로 지정해주어야 한다.

2. How to get mini-batch with data that have similar sequential length

비슷한 시퀀스 길이의 데이터끼리 mini batch를 구성하도록 하는 방법

불필요한 zero padding을 줄여 연산의 비효율 방지

  • 데이터 전처리 단계에서 길이 순으로 sorting
  • tf.data.experimental.bucket_by_sequence_length 으로 dataset을 새롭게 생성
    • Elements of the Dataset are grouped together by length and then are padded and batched

0개의 댓글