지금까지 인공신경망+심층신경망을 배우고, 이를 케라스 API로 직접 만들어봤다.
이번 시간엔 이렇게 모델을 훈련하면서 필요한 추가 도구들을 배워보자!
.fit()
메소드는 History 객체를 반환함.validation_data
: fit의 매개변수로, 검증세트의 결과도 반환하도록 설정 가능함!(➕옵티마이저 다른 걸로 바꿔서 완화시키기도 하지만, 지금은 신경망의 대표적인 규제방법을 알아보겠음)
Dropout()
: 드롭아웃 기능을 제공하는 클래스. 얼마나 drop할지 비율을 지정해야 함.epochs=10
으로 설정하고 다시 훈련해야겠군..일을 하다보면, 만든 모델을 잠깐 저장해뒀다가 다음에 다시 훈련한다든가, 저장해두고 다른 사람이 그걸 불러와서 쓴다든가 할 일이 생깁니다. 이런 저장과 복원 기능은 웬만한 라이브러리에서 다 제공하고 있지요.
.save_weights()
: 훈련된 모델의 가중치를 저장하는 메소드.save()
: 훈련된 모델의 구조와 가중치를 통째로 저장하는 메소드.load_weights()
: 이전에 저장했던 모델의 가중치를 적재하는(불러오는) 메소드.load_model()
: 이전에 저장했던 모델 전체를 불러오는 메소드👨🏻🏫 물론
evaluate()
써도 되지만, 그렇게 계산하려면 복원한 모델에 또 다시compile()
을 실행해야 합니다. 여기에선 그냥 새로운 데이터에 대해 정확도만 계산하면 되는 상황이라고 가정합시다.
< 계산 방법 : 예측클래스 직접 구하고, 그거랑 타깃이랑 비교해서 맞춘 비율로 구할 것임. >
.predict()
: 샘플마다 각 클래스일 확률을 반환해줌. (사이킷런 predict_proba처럼).argmax()
: predict가 출력한 확률들 중에 가장 큰 값을 뽑기 위해 넘파이 활용함.axis=-1
: 배열의 마지막 차원(여기서는 axis=1)을 따라 argmax를 수행함.val_labels
와 val_target
을 비교해서, 일치하는 비율이 곧 검증세트의 정확도가 됨!👨🏻🏫 이 경우는 모델의 구조와 옵티마이저까지 모두 그대로 복원했기 때문에 바로
evaluate()
를 사용할 수 있습니다!
.load_model()
: 이전에 저장했던 모델 전체를 불러오는 메소드자, 그런데 #2의 끝자락으로 다시 가서 생각해보면 •••
매번 이렇게 수동으로 다시 최적의 에포크 설정하고,, 다시 모델 훈련하고,, 그래야만 하나?
keras.callbacks
패키지 아래에 다양한 클래스들이 있다.fit()
할 때 callbacks
매개변수로 전달하면 된다.ModelCheckpoint()
: 가장 자주 사용되는 콜백으로, 에포크마다 모델을 저장해줌.save_best_only=True
: 손실이 가장 낮은 모델만 저장하도록 하는 설정.EarlyStopping()
: 과대적합이 시작되면 훈련을 알아서 조기종료 해주는 콜백.patience
: 검증세트 성능이 좋아지지 않더라도 참고 기다릴 에포크 횟수 설정.restore_best_weights=True
: 훈련동안 가장 손실 낮았던 최적 가중치로 돌리는 설정.fit()
에서 epochs
를 마음놓고 크게 설정해도 괜찮음^^.stopped_epoch
: 몇 번째 에포크에서 조기종료 했는지 저장되어 있는 속성.patience
설정했던 것과 같이 생각해보면 최상의 에포크가 언제인지 나옴!verbose
: fit()에서 쓰는 매개변수로, 훈련과정의 출력을 조절해줌.405p.
predict_classes()
메소드도 필요성이 있어보이는데 왜 사라지는 거죠..? 개발하신 분의 깊은 뜻이 있겠죠..?^^
이번엔 신경망 모델을 더 잘 만들 수 있도록 도와주는 도구들을 배웠다. 과대/과소적합 문제를 잊고 있었는데,, 신경망도 역시 피해갈 수 없는 문제였구나,,! 사이킷런 때와는 또 다른 방식으로 규제를 할 수 있다는 게 신선했다. 정말 무궁무진한 ML/DL의 세계.. 이 뒤에는 더 자세한 딥러닝 모델들이 나올텐데 기대반 걱정반이😂 다른 것도 할 게 많지만 <혼공머신> 만큼 입문하기 좋은 게 없을테니 시간날 때 강의라도 들어두자..!
fit의 반환값을 사용해서 훈련세트 & 검증세트의 손실을 그래프로 그려봄 → 과대적합 발견 → 신경망의 대표적인 규제방법인 드롭아웃으로 완화시켜봄! → 만든 모델(가중치 or 모델 전체)을 저장하고 복원하는 기능도 새롭게 배움 → 근데 생각해보니 매번 최적의 에포크로 다시 모델 만들기 귀찮음 ㅠ → 콜백 기능을 사용하니 그 과정을 자동화해서 편리하게 최상의 모델을 만들 수 있게 됨! = ModelCheckpoint로 최상의 모델만 저장하고, EarlyStopping으로 불필요하게 훈련 길어지는 것도 막음
➕ 드디어... (?) 혼공학습단 6주 과정의 모든 미션이 끝났다!!! 시원섭섭한 이 소감은 회고록에 끄적여둬야지 ,,✍🏻