관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

딥러닝 14 - Callback 함수 실습해보기 본문

인공지능/딥러닝

딥러닝 14 - Callback 함수 실습해보기

huenuri 2024. 9. 22. 23:59

이 내용은 공부를 하지 않으려고 했는데 그래도 코드만 있는채로 남겨두는 게 영 걸려서 그냥 마저 학습을 진행하기로 했다. 수업 영상은 없지만 모르는 건 찾아보면서 공부하면 될 것 같았다.


 

 

 

Callback 함수 실습해보기

 

 

매번 런타임 중단시 다시 학습하는 것이 아니라 학습한 모델을 저장하여 이것을 불러서 쓰는 기능이다.

 

 

 

 

Callback 함수는 딥러닝 모델 학습 중 특정 시점(에포크 종료, 배치 처리 후 등)에 호출되어 다양한 작업을 수행할 수 있게 해주는 함수이다. 이러한 콜백 함수는 딥러닝 모델의 성능을 향상시키고, 학습 과정을 더욱 효율적으로 관리하기 위해 사용된다.

Callback 함수의 주요 역할

Callback 함수는 모델 학습 중간에 특정 이벤트가 발생할 때 실행되며, 다음과 같은 작업을 할 수 있다.

  • 학습 중단(Early Stopping) : 성능이 더 이상 개선되지 않으면 학습을 중단시킨다.
  • 모델 저장(Model Checkpointing) : 특정 조건(예: 검증 정확도나 손실이 개선될 때)에서 모델의 가중치를 저장한다.
  • 학습률 조정(Learning Rate Scheduling) : 에포크가 진행됨에 따라 학습률을 동적으로 조정한다.
  • 로그 기록(Logging) : 학습 도중 손실 값, 정확도, 기타 성능 지표 등을 로그로 남긴다.
  • 사용자 정의 콜백 : 사용자가 직접 원하는 조건이나 규칙을 정의하여 학습 과정에 적용할 수 있다.

 


 

 

 

 

모델을 학습하는데 굉장히 시간이 많이 걸린다. 지금까지 실행했던 모델 중에 가장 속도가 느린 것 같다. 다른 코드는 이전에 실습에서 많이 설명했으므로 여기서는 Callback 함수에 대한 내용만 설명해보려고 한다.

callbacks=[mcp, early]에서 학습 중 콜백 함수를 사용한다. 여기에 사용된 두 콜백 mcp와 early는 각각 ModelCheckpoint와 EarlyStopping을 의미할 가능성이 크다.

 

mcp (ModelCheckpoint) : ModelCheckpoint 콜백은 학습 중 모델의 성능이 개선될 때마다 해당 시점의 모델 가중치를 저장한다. 예를 들어, 검증 데이터에 대한 손실이나 정확도가 가장 좋을 때 모델을 저장하여 나중에 사용할 수 있다.

early (EarlyStopping) : EarlyStopping 콜백은 학습이 더 이상 개선되지 않으면 학습을 중단시킨다. 이는 과적합을 방지하고, 불필요한 학습을 줄이는 데 도움이 된다.

 

36에서 모델이 중단되었는데 이러한 callback 함수 때문에 그러하다. 모델은 검증 데이터에 대한 성능이 개선될 때마다 가중치를 저장하며, 성능이 더 이상 개선되지 않으면 학습을 자동으로 중단하는 콜백을 포함하고 있다. 즉 100 에포크 동안 학습이 진행되지만, EarlyStopping에 의해 조기 종료될 수 있는 것이다.


 

 

 

 

 

 

드디어 이 코드를 실행시켰다. 어찌나 안 되던지.. 근데 마운트를 안 해서 그런 거였다. 마운트를 해도 안 나타났는데 한참 있다가 뜨는 것 같았다.

다른 손글씨도 한번 옮겨보기로 했다.

 

 

 

이것도 흑백으로 변환시켰다.


 

 

 

오류 코드 다시 실행해보기

 

코드가 계속 실행이 안 되서 그 이유를 분석해보니 데이터에 선생님이 제공하신 파일이 빠져있어서 그런 거였다. 다른 그림 파일은 픽셀이 맞지 않아서 이 모델에는 처음부터 적용할 수가 없는 거였다.

그래도 실패를 해보며 많은 것들을 배우는 시간이었다.

 

 

 

 

 

 

이 코드로 실행시키는데 많이 어려웠다. 역시 수업 영상이 없으니 코드를 이해하는데 어려움이 있었다. 그래도 지금까지 공부하면서 단 한번도 문제를 풀지 못한 적은 없었다. 

이번에도 난 반드시 해결하겠다는 일념으로 도전했더니 풀리지 못하는 문제는 없었다. 모델을 불러와서 예측을 했다. 이 모델의 클래스는 8번임을 알 수 있었다.

 


 

 

 

학습을 마치고

이렇게 오늘 12시 안에 마치기로 했던 딥러닝 공부를 모두 다 마쳤다. 하루만에 일주일치 딥러닝 수업을 전부다 학습하고 정리하다니 내가 생각해도 참 대단했다. 그리고 수업 영상이 없는 것들도 코드만 보고 해석해서 이렇게 이해하고 공부를 다 마쳤다는 것도 놀라웠다.

역시 마음 먹고 하면 세상에 못할 게 하나도 없었다. 그동안 내가 뭔가 뚜렷하게 이룬 성과가 없었던 건 열심히 하지 않았기 때문이다. 단 한번도 공부도 그 무엇도 열심히 해본 역사가 없었다. 이제야 난 철이 들고 성숙해지는 걸 느낀다.

 

이제 진짜 어른이 되는 것 같았다. 오늘은 철야를 하기로 했으니 바로 이어서 정처기 실기 공부를 시작해볼 것이다.