-
[DeepLearning] 학습 단계를 train, validation, test 로 나누는 이유AI 2020. 4. 20. 21:33
pytorch로 예제를 학습하는 도중에
익숙치 않아서 그런지 사소한 개념이 적립에 시간이 많이 소요되고 있다.
그 중 하나가 모델을 학습할때 train, validation, test로 단계를 나누는 이유이다.
pytorch에선
아래 코드로 모드를 변경 시킬 수 있고, 꼭 해야한다.
model.train() # 트레이닝모드 model.eval() # 검증모드
model.eval()의 경우 validation과 test 단계에 꼭 선언해야한다.
그럼 개념적으로 정리를 해보자.
데이터가 총 1000개가 있다면, train 6000개, validation 2000개, test 2000개로 나누어 준다.
train 단계는 말 그대로 모델을 학습시키는 단계이다.
그 말은 즉 validation과 test 단계에서는 학습을 시키지 않는다. ( 학습은 optimizer.step() )
같은 epoch 단계에서,
train이 되었다면 곧바로 validation을 해준다.
검증 목적은 최적의 epoch를 찾아 overfiting과 unseen data 문제 를 막는 것이다.
검증용 데이터를 모델에 넣어 loss(MSE(used 손실함수))를 확인해 트레이닝이 잘 되고 있는지 확인하는 것이다. (모델을 사용)
마지막으로 test 단계는 검증 단계와 같다,
다만 loss를 MAE(used 회귀지표) 같은 함수를 사용해 최종적으로 평가를 한다.
아래 결과 이미지를 보면,
특정구간부터 train과 validation의 정확도와 손실값의 흐름이 차이 나는 것을 알 수 있다. (overfiting 문제)
validation을 사용하면 적정 epoch 값을 구할 수 있다.
위의 경우 epoch를 9~10 정도 선으로 해야한다.
'AI' 카테고리의 다른 글
[pytorch] MLP model source code by python (0) 2020.04.24 [pytorch] How to use nn.CrossEntropyLoss() 사용법 (0) 2020.04.21 [PyTorch] How to run pytorch using conda by linking vscode and jupyter notebook on OSX(mac). (0) 2020.04.17 CNN - pytorch convnet에서 zero padding 값 구하는 공식 (0) 2020.04.16 [tensorflow] How to use contrib.eager.metrics on tensorflow 2.x version (0) 2020.03.25