[Tensorflow] load_model 과 확장자

 근 2주 동안 인공지능 공부를 다시 잡고 확장자에 대해서 조금 더 알게 됬다.

(이전에 처음 배웠을 땐, 스쳐지나가듯 넘겼지만)


TensorFlow 에서 사용하는 모델 저장 방식은 크게 두 가지로 나눌 수 있다.

HDF5 포맷( .h5 확장자)

- 가중치, 학습 설정이 된 keras 모델을 하나의 파일에 저장한 방식

-하나의 파일로 모델을 저장하여 간편하나, TensorFlow 2.* 의 확장 기능(서브클래싱 모델 등)을 충분히 지원하지 못함


디렉토리 포맷(saved_model.pb)

- TensorFlow의 기본 저장 형식

- 모델의 아키텍처, 가중치, 메타데이터 등 디렉토리 내부에 저장하는 방식

- TensorFlow 의 확장 기능을 완벽하게 지원하나, 단일 구조가 아니므로 파일 구조가 복잡해질 수 있음


※실습 오류 내역

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2024-09-26 09:08:07.198470: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2024-09-26 09:08:07.198694: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2024-09-26 09:08:08.993443: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found
2024-09-26 09:08:08.993633: E tensorflow/stream_executor/cuda/cuda_driver.cc:351] failed call to cuInit: UNKNOWN ERROR (303)
2024-09-26 09:08:08.997087: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: LAPTOP-GOU2ATVV
2024-09-26 09:08:08.997310: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: LAPTOP-GOU2ATVV
2024-09-26 09:08:08.997788: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Traceback (most recent call last):
  File "D:\chatbot\chatbot_test\loadmodel.py", line 35, in <module>
    model = load_model('./cnn_model.h5', custom_objects=custom_objects)
  File "D:\anaconda3\envs\chatbot_test\lib\site-packages\tensorflow_core\python\keras\saving\save.py", line 146, in load_model
    return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
  File "D:\anaconda3\envs\chatbot_test\lib\site-packages\tensorflow_core\python\keras\saving\hdf5_format.py", line 166, in load_model_from_hdf5
    model_config = json.loads(model_config.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'
cs

-  HDF5 형식의 모델의 저장, 로드 중 발생하는 오류

- TensorFlow 2.* 버전과 python3 에서 문자열 처리 방식의 변경으로 발생


해결 방안

1. TensorFlow 버전 업데이트 및 재설치(h5py 라이브러리 업데이트 포함)

1
2
3
pip install --upgrade tensorflow
pip install --upgrade h5py
 
cs


2. 모델의 재작성

→ 작성 모델을 HDF5 이 아닌 디렉토리 포맷으로 재작성

1
2
3
4
#h5 확장자 관련, utf 파일을 읽어올 수 없는 오류로
#디렉터리 포맷으로 저장
#model.save('cnn_model.h5')
model.save('cnn_model')
cs

댓글