Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[TensorFlow] batch_normalization 사용 시 주의사항 본문
이전글에서 DCGAN을 만들면서 tf.layers.batch_normalization을 사용하게 됬는데
training 옵션이 False일땐 잘 되면서 True일땐 학습하지 않은 결과만 못한 출력을 내더라고요.
이것저것 검색하다가 결국 공식 문서에 해답이 있다는걸 알았습니다.
training시에 moving_mean과 moving_variance는 수동으로 업데이트 해줘야한다고 합니다.
기본적으로 갱신연산(update op)들은 UPDATE_OPS 키에 속하고
이걸 학습연산(train op)의 종속성에 추가해주면 된다고 합니다.
그 방법이 위 사진의 코드에 해당합니다.
(신경망 구현 코드를 다 작성한 뒤)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
로 갱신연산을 가져올 수 있고
train_op = optimizer.minimize(loss)와 비슷한 기존의 최적화 함수를 생성하는 부분을
with tf.control_dependencies(update_ops):
아래에 넣으면 train_op는 update_ops의 연산이 끝난 후에 연산되게 됩니다.
이걸 적용하고 나니까 False, True 상관없이 결과가 잘 나오더라고요.
아주 조아용 홓홓
아, 주의하실게 있는데 위 방법을 적용하고 나면 train_op의 연산에 필요한 placeholder가 더 추가될 수 있습니다.
왜냐하면 train_op를 연산하면 이것만 연산되는게 아니라 종속성으로 지정한 update_ops도 연산되기 때문이죠.
그래서 update_ops 연산에 필요한 placeholder도 feed_dict에 넣어주셔야 됩니다.
그럼 이만!
'개발 및 공부 > 라이브러리&프레임워크' 카테고리의 다른 글
[TensorFlow] DQN으로 게임 플레이 학습하기 (0) | 2018.02.24 |
---|---|
[TensorFlow] Google의 Inception 모델로 꽃 분류하기 (0) | 2018.02.15 |
[TensorFlow] DCGAN으로 MNIST 이미지 생성 성공(?) (2) | 2018.02.09 |
[TensorFlow] Seq2Seq로 간단한 번역기 만들기 (0) | 2018.02.03 |
[TensorFlow] layers.dense에 대한 고찰(?) - tensordot (2) | 2018.02.02 |
Comments