관리 메뉴

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

케라스 7 - 모델 저장 및 불러오기 본문

인공지능/딥러닝

케라스 7 - 모델 저장 및 불러오기

huenuri 2024. 10. 26. 19:33

이제 모델을 저장하고 불러오는 방법을 학습해 보겠다. 예제 실습을 위해 mnist 데이터셋을 불러오고, 앞에서 사용한 신경망 모델을 활용하여 모델 훈련을 먼저 완료한다.


 

 

 

모델을 파일로 저장

훈련을 종료하여 가중치가 업데이트된 모델 인스턴스를 저장할 수 있다. save() 메서드를 사용하는데, save() 메서드를 호출할 때 저장할 파일의 디렉터리를 포함하는 파일명을 매개변수로 지정한다. 모델을 저장하는 형식은 HDF5 포맷과 SaveModel 포맷 두 가지가 있다.

 

모델을 저장할 파일명이 .h5 확장자를 포함하는 경우는 모델이 HDF5 포맷으로 저장한다. 이 파일 형식은 대용량의 데이터를 저장하기 위한 파일 형식이다.


 

 

저장된 모델 복원

tensorflow.kerase.models.load_model() 메서드로 저장된 모델을 복원할 수 있다. 저장된 HDF5 파일 형식의 모델을 복원하여 summary()를 확인하면 모델 구조가 그대로 복원되어 있다.

 

 

복원한 모델을 검증하여 복원이 잘 되었는지 확인한다. 검증 셋을 evaluate 함수에 대입해, 손실함수와 평가지표를 계산한다.

 

.h5 확장자를 생략하면 SavedModel 포맷으로 저장되며 텐서플로 2에서 기본으로 지원하는 포맷이다.  SavedModel 포맷으로 저장된 모델을 복원할 때 HDF5와 같은 방식으로 복원하면 된다.

하지만 save로 하면 오류가 발생했다. export로 하면 문제없이 실행된다.

 

 

 

 

Keras3에서는 lode_model을 지원하지 않아 이와 같이 코드를 수정했다. 그리고 이 레이어는 summary() 메서드가 없어 그냥 print를 했다.

 

 

 

이 코드를 수행을 10번 이상 바꾸면서 코드를 수정했지만 정말 안되었다. 지원하지 않는 기능들이 많아서 그냥 넘어가기로 했다.

 

 

코드 다시 수정하기

 

케라스 3에서는 HDF5 같은 형식이 지원되지 않는 것 같다. 그래도 SavedModel 형식으로는 로드해서 loss와 acc 값을 구했다.


 

 

 

학습을 마치고

코드가 실행이 안되는 게 많아서 조금 화가 나기도 했다. 책은 3년 전에 출판된 건데 재판을 하든 책을 이후로 수정하며 업데이트해야 하는데 조금 실망스러웠다. 잘못된 코드가 얼마나 많던지 한 소단원당 3개 이상은 코드를 수정해서 공부하는 중이다.

이번 마지막 코드는 아무리 자료를 찾고 검색을 해도 반영이 되지 않아 그냥 넘어가려니 많이 찝찝했다. 저자든 제작자는 자신이 만든 작품에 책임을 져야 한다는 걸 느끼는 시간이었다.