• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

keras에서 이미 정의된 모델을 가져와 학습할 경우

21.11.05 19:02 작성 조회수 448

0

안녕하세요.

영상을 보며, 테스트를 하다가 질문 몇개가 생겨서 글을 씁니다.

 

1.

학습을 진행하다가 다시 재학습을 할 때, train_step을 이용하면 영상과 같이 한다는 것은 이해했습니다.

그런데 케라스에서 미리 정의된 모델(ex. densenet)을 가져와서 학습을 할 경우에는 보통 model.fit을 사용해 학습하던데요.

그 때에는

checkpoint_save = tf.keras.callbacks.ModelCheckpoint(.....)

model.fit(x,y,... callbacks=checkpoint_save)

위와 같이 콜백 함수를 사용해 가중치를 저장하더라구요.

영상과는 다른 경우인 model.fit을 사용할 때, 다시 재학습을 하려면 어떤 식으로 해야 하나요.

> 알려주신대로,

ckpt = tf.train.Checkpoint(step=tf.Variable(0), model=model)

ckpt_manager = tf.train.CheckpointManager(ckpt, directory=checkpoint_directory, max_to_keep=5)

latest_ckpt = tf.train.latest_checkpoint(checkpoint_directory)

if latest_ckpt:

    ckpt.restore(latest_ckpt)

이렇게 하면 불러와 지기는 할 것 같던데

model.fit으로 학습 하면 epoch가 다시 1부터 시작하더라구요. 

그래서 이게 제대로 불러와서 재학습을 하는가 싶기도 하고요.

실제로 재학습이 된다고 해도 몇번째인지 알기도 힘들었습니다. 뭔가 깔끔한 방법이 있는지 궁금합니다.

 

2.

학습된 가중치를 불러올 때, 영상에서는 ckpt.restore를 썼는데요. model.load_weights와 다른 점은 같은 모델일 때 없는 것인가요.

 

항상 잘 듣고 있습니다. 감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요~. 반갑습니다.

1. beginner style 구현(Keras의 model fit 등을 사용)을 사용하실 경우 2.에서 말씀해주신 load_weights를 이용해서 체크포인트를 불러오시면 됩니다. (https://www.tensorflow.org/tutorials/keras/save_and_load?hl=ko 를 참조하세요.)

2. load_weights와 ckpt.resotre는 beginner style 구현이냐 expert style 구현이냐의 차이로 기능의 차이는 없습니다.

좋은 하루되세요.

감사합니다.