2020-03-20 12:47:29

괜찮은 성능을 낼 수 있는 딥러닝 모델을 훈련시키는데는 적게는 몇시간, 많게는 몇일이 걸리기도 합니다. 공들여 힘들게 훈련시킨 모델을 저장할 수 있는 방법이 없다면, 절망스럽겠죠. 한 번의 작업수행을 위해 그 훈련의 과정을 계속 반복해야합니다. 하나의 이미지를 분류하는데 몇일을 소요해야합니다. 

 

인간은 저를 포함해서 꽤 어리석긴 하지만, 그렇게까지 어리석진 않습니다. 모델을 저장하고, 그 저장을 불러올 방법이 필요하다는 것을 인지했고 개발했습니다. 개발자는 필요를 인지하면, 기어코 개발하고야 말죠. 

 

딥러닝 모델은 기본적으로 여러 층으로 이뤄진 구조를 가지고 있고, 층마다 훈련시켜야할 가중치들을 가지고 있습니다. 딥러닝 모델을 훈련시킨다는 뜻은 수많은 데이터를 이용해서 이 가중치들이 최적의 값을 갖도록 해주는 것입니다.  

 

따라서, 딥러닝 모델을 저장하고 불러오는 것도 두가지 차원에서 생각해야 합니다. 구조(structure 또는 architecture)와 가중치(weights). 이 두 가지를 모두 저장해야 모델을 저장했다고 말할 수 있습니다.

 

저희는 오늘 이 구조와 가중치를 각각 어떻게 저장하고, 또 하나의 파일의 형태로 저장할 수 있는지에 대해 살펴볼 것입니다. 하나의 파일의 형태로 저장이 되어있어야 나중에 불러와서 사용할때도 좋겠죠? 

 

모델 구조는 두 가지의 형식으로 저장될 수 있습니다. 하나는 JSON이고 또다른 하나는 YAML입니다. 그리고 모델 가중치들은 HDF5 형식으로 저장됩니다. 낯선 형식들에 대한 이야기는 차치하고 어떻게 사용하는지에 집중해서 글을 이어가겠습니다. YAML보다는 JSON을 좀 더 많이 사용하는 것 같아 JSON의 형식으로 모델 구조를 저장하고, HDF5 형식으로 모델 가중치를 저장하는 예제 코드를 공유해드리겠습니다. 

 

저는 지금 여러분께서 어떠한 딥러닝 모델을 훈련시켰다고 가정하겠습니다. 그러면 마지막 부분에 다음과 같은 코드가 있겠죠?

 

이 코드는 각자의 상황에 따라 조금씩 다를 수 있습니다.^^ 

 

이런 상황에서 이제 이 훈련된 모델을 저장하는 코드는 다음과 같습니다. 

 

모델 저장하기!

 

다른 .py 파일에서 이 모델을 불러올 때는 다음과 같이 불러오면 됩니다. 

 

모델 불러오기!

 

어렵지 않죠? ㅎㅎ 제대로 불러와졌는지 확인해보는겸 model.summary()를 입력해봤습니다. 이 딥러닝 모델이 심교훈님의 모델이 맞습니까? 

 

 

네! 제가 훈련시킨 딥러닝 모델이 맞습니다!!

 

재밌게 읽으셨나요? ㅎㅎ 이 글은 여기서 마치도록 하겠습니다. 참고로 저도 한 줌의 지식만 갖고 있을 뿐입니다. 그것도 제가 관심있거나 제가 알아야하는 분야에 대해서 말이죠. 그 한 줌의 지식도 딥러닝 모델의 가중치가 업데이트되듯이 조정이 필요할 때가 많습니다. 그래서 항상 질문과 지적과 토론은 환영합니다. 댓글 남겨주세요.^^ 

 

 

<참고자료>

[1] https://machinelearningmastery.com/save-load-keras-deep-learning-models/, Jason Brownlee, "How to save and load your keras deep learning model"