[Tensorflow] 2-7 Dropout

Dropout


  • 왜 사용할까 ?
  이전에 한번 공부했던 Over-fitting, Over-fitting Issue를 막기 위해 사용된다. 다시 복습해보면 여기서 가장 안좋은 경우는 over-fitting으로 train 데이터에 대한 성능은 매우 높으나 test data를 넣으면 예상과 달리 성능이 엄청나게 낮게나오는 경우이다. dataset 의 크기를 조정하는 등 여러가지 방법으로 해결할 수 있지만 이번에는 Dropout에 대해 공부해봤다. 

  • Dropout
Dropout이란 학습에 이용하는 노드의 수를 조절하는 것이다. 전체 가지고있는 노드를 전부 사용해서 확인하는 것이 아니라 일부를 끄고 학습 한 후 test data로 확인하는 과정에서는 전체 노드를 이용하는 방법이다. 



예를 들어 위의 모델을 사진이 고양이인지를 알아내는 모델이다. 회색으로 나타난 노드들은 랜덤으로 꺼진 노드이고 하얀 노드만을 이용하여 학습을 진행한다. 
이것 또한 Regularization이라고 할 수 있는데, 기존에는 이 고양이의 모든 부분들을 보면서 고양이라고 학습하게되는데 Dropout을 사용하게되면 예를들면 고양이의 눈, 혹은 꼬리, 귀 등 부분적인 특징만을 가지고 데이터가 고양이인지 판단하게되므로 학습데이터로 사용된 갈색 고양이 뿐만아니라 검정색 고양이가 test data로 입력된다고해도 고양이로 분류할 수 있게되는 것이다. 

  • Code

1
2
def dropout(rate):
    return tf.keras.layers.Dropout(rate)
cs


rate는 노드/뉴런의 몇 %를 끌 것인지 설정하는 것이다. 0-1 사이의 값을 주면 된다. 
그리고 dropout의 on/off 조정은 


1
logits = model(images,training=False)
cs





ON 하기 위해서는 False를 True로 두면 된다. 

No comments:

Powered by Blogger.