본문 바로가기
DataScience/MachineLearning

딥러닝 텐서플로우 모델을 저장하는방법, 모델중 네트워크와 웨이트를 따로 저장하고 불러오는 방법

by leopard4 2022. 12. 29.
Saving the architecture
# ANN == 아티피셜 뉴럴 네트워크 
# 전체 네트워크(build_model())와 웨이트(선==w==가중치)를 통으로 저장하고 불러오기
# 폴더구조로 저장.
model.save('fashion_mnist_model') 

# 저장된 인공지능을 불러오는 코드.
model2 = tf.keras.models.load_model('fashion_mnist_model')
model2.evaluate(X_test, y_test)

# 모델을, 파일 하나로 저장하는 방법
model.save('fashion_mnist_model.h5')

# 파일을 불러오기
model3 = tf.keras.models.load_model('fashion_mnist_model.h5')
model3.predict(X_test)

Saving network weights
# 네트워크만 저장하고 불러오기
# 네트워크를 json 파일로 저장하는 코드
fashion_mnist_network = model.to_json() # 파이썬 딕셔너리 리스트의 조합
with open('fashion_mnist_network.json' , 'w') as file :
  file.write(fashion_mnist_network) 
  
# 저장된 네트워크를 읽어오는 코드
with open('fashion_mnist_network.json' , 'r') as file : # as == ('fashion_mnist_network.json' , 'r')을 file 이라고 하겠다.
  fashion_net = file.read()

# 위의 네트워크로부터 모델을 만들고 싶으면,
model4 = tf.keras.models.model_from_json(fashion_net)

# model4는 네트워크만 가져온 것이지... 학습 완료된 웨이트는 가져온것이 아니다.
# 따라서 현재 웨이트는 랜덤으로 셋팅된 웨이트다.
# 이것으로 예측 수행하면 안된다.
model4.predict(X_test)  # 이게안된다는거

# 그렇기 때문에 웨이트도 가져와보자.
# 웨이트를 저장하고 불러오는 코드
model.save_weights('fashion_mnist_weight.h5') # 저장
model4.load_weights('fashion_mnist_weight.h5') # model4에 불러오기 // 네트워크+웨이트 한것
model4.predict(X_test) # 이게정상

# 피처스케일링을 저장하는것 
# import joblib 
# 저장
# joblib.dump( 스케일러나 인코더의 변수, pkl파일명)
# 불러오기
# joblib.load(스케일러나 인코더의 pkl파일명 )