inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

딥러닝 CNN 완벽 가이드 - TFKeras 버전

save_weights_only=True로 했을 때 load_model 오류

해결된 질문

779

kjyn0124

작성한 질문수 5

0

안녕하세요 교수님!

ModelCheckpoint에서

ModelCheckpoint('best_model.h5', save_weights_only=True, monitor='val_loss', save_best_only=True, mode='min')

save_weights_only = True로 했을 때 아래와 같은 load_model 에러가 나더라구요..

그래서 구글링을 해봤는데 저렇게 설정할 경우에 모델 아키텍처가 저장이 안되어서 load_model을 할 수 없다고 json 파일로 모델을 따로 저장하고 나중에 json 모델을 다시 불러오는 방법을 사용하라고 나왔습니다.

 

  1. 강의 중에도 언급해주셨지만 save_weights_only = True로 했을 때의 이점이 있을까요..? False로 했을 때 교수님께서 모델을 불러올 때 충돌..? 비슷한 것이 난다고 하셨는데 좀 더 세부적인 내용을 알고 싶습니다..!

  2. 만약에 True로 설정했다면 매번 json으로 모델을 저장하는 과정을 거쳐야 하는 것인지 궁금합니다!

    model.save() 함수도 있던데 이거는 modelcheckpoint와 달리 학습 중에 저장은 안되는 것 같아서요..

 

항상 감사합니다 교수님!!

머신러닝 딥러닝 keras tensorflow kaggle cnn

답변 1

1

권 철민

안녕하십니까,

원래 초창기 keras는 weight와 layer기반 모델, optimizer 정보만을 하나의 파일로 저장합니다. 그리고 weight만 저장하더라도 하나의 파일로만 저장합니다. 반면에 Tensorflow는 weight는 별도의 파일로 만들고, layer기반 아키텍처와 optimizer, metric, loss정보는 또 다른 파일에 저장합니다.

또한 Keras의 경우는 fit()을 수행할 때 callback에서 모델과 weight를 함께 저장하는 방식을 적용할 때, 버전에 따라 알수 없는(?) 오류를 맞는 경우들이 있는 것 같습니다. tensorflow 저장 방식은 checkpoint(weight)와 모델 저장이 별도로 되는데 keras는 옛날부터 h5 형식으로 단일 파일에서 저장합니다. 이게 뭔가 tensorflow와 keras가 합쳐지면서 잘 안 맞는 느낌입니다(지금은 버전이 향상되어서 잘 될지도 모릅니다)

  1. save_weights_only = Fasle로 한번 시도해 보시지요. 다만 저는 말씀 드렸듯이 오류가 발생하는 경우가 있었습니다.

     

  2. 저는 fit()에서 callback으로 ModelCheckPoint 사용 시 weight만 저장 하는 방식을 선호 합니다. 모델은 다시 메모리로 아래와 같이 만든 저장된 checkpoint weight를 로딩하는 방식입니다.

    sequential_model = keras.Sequential(  

    [         keras.Input(shape=(784,), name="digits"),        

    keras.layers.Dense(64, activation="relu", name="dense_1"),        

    keras.layers.Dense(64, activation="relu", name="dense_2"),        

    keras.layers.Dense(10, name="predictions"),     ] )

load_status = sequential_model.load_weights("ckpt")

만약 모델과 weight를 하나의 파일로 다 저장하시려면 학습이 다 완료된 후에 model.save("my_h5_model.h5") 로 모델과 weight를 h5로 다 저장하신 후 아래와 같이 로딩하시면 됩니다.

reconstructed_model = keras.models.load_model("my_h5_model.h5")

보다 자세한 모델 저장 및 로드는 아래 URL 참조 부탁드립니다.

https://www.tensorflow.org/guide/keras/save_and_serialize?hl=ko

감사합니다.

resize 질문

0

50

1

20251212 Kaggle 런타임에 scikit-learn 설치 실패 트러블 슈팅

0

75

1

Loss와 매트릭 관계

0

61

2

Boston 코랩 실습

0

162

2

배치 정규화의 이해와 적용 2 강의 질문

0

134

2

Augmentation원본에 적용해서 데이터 갯수 자체를 늘리는 행위는 의미가있나요?

0

144

2

Conv함수 안에 activation 을 넣지 않는 이유가 뭔지 궁금합니다.

0

203

2

소프트맥스 관련 질문입니다

0

208

1

강의 관련 질문입니다

0

151

2

residual block과 identity block의 차이

0

186

2

옵티마이저와 경사하강법의 차이가 궁금합니다.

1

238

1

실습 환경

0

165

2

입력 이미지 크기

0

243

2

데이터 증강

0

195

2

albumentations ShiftScaleRotate

0

205

1

Model Input Size 관련

0

279

1

마지막에 bird -> frog 말고도 deer -> frog 도 잘못된것 아닌가요??

0

204

1

일반적인 질문 (kaggle notebook사용)

0

272

2

실무에서 Augmentation 적용 시

0

338

2

안녕하세요 교수님

0

231

1

가중치 초기화(Weight Initialization) 질문입니다.

0

327

1

테스트 데이터셋 predict의 'NoneType' object has no attribute 'shape' 오류

0

407

1

학습이 이상하게 됩니다.

2

1036

2

boston import가 안됩니다

0

228

1