2017-10-23 14 views
0

나는 cifar10 데이터 세트의 시작 v3 모델을 미세하게 튜닝했다. 그것을 저장하고 난 후에, 모델의 크기는 175 Mo 다. 훈련 전에 그것은 약 90 Mo 다. 그래서 나는 잘 조정되었던 모델이 더 큰지 궁금하게 생각하고있다? 두 모델의 매개 변수 수를 보면 거의 동일합니다.모델의 케라 무게가 예상보다 크다

원래 모델 : 총 PARAMS : 23851784 학습 가능한 PARAMS : 23817352 비 학습 가능한 PARAMS : 34,432

미세 조정 모델 : 총 PARAMS : 21823274 학습 가능한 PARAMS : 21788842 비 학습 가능한 PARAMS : 34,432

누구에게이 아이디어가 있습니까? 모델을 저장하기 위해 피트 생성기 함수 내 콜백에서 ModelCheckpoint 함수를 사용합니다.

기본적으로
checkpoints = ModelCheckpoint(output+'-{epoch:02d}.hdf5', verbose=1, save_best_only=False, period=checkpoint) 
callbacks_list = [callback_tensorboard, checkpoints] 

# train 
model.fit_generator(train_generator, 
     steps_per_epoch=step_train, 
     epochs=epochs, 
     verbose=1, 
     validation_data=test_generator, 
     validation_steps=step_test, 
     callbacks=callbacks_list) 

답변

1

ModelCheckpoint 다음을 포함하여, 모델에 대한 모든 것을 저장합니다

  • 모델 아키텍처
  • 무게
  • 최적화 및 손실 기능과 같은
  • 교육 구성
  • 최적화의 상태 따라서 검사 점에서 직접 교육을 재개 할 수 있습니다.

ADAM 또는 RMSProp과 같이 각 매개 변수에 대해 실행 평균이 유지되는 최적화 프로그램을 사용하는 경우이 최적화 프로그램 상태는 HDF5 파일에도 저장되므로 최종 파일 크기가 인수 최적화 프로그램에 의해 정의됩니다.

쉬운 해결책은 model.save_weights을 수동으로 사용하여 가중치를 저장하거나 save_weights_only 매개 변수를 ModelCheckpoint의 True로 설정하는 것입니다.

+0

"옵티 마이저의 상태이므로 검사 점에서 직접 교육을 재개 할 수 있습니다."기하 급수적 인 이동 평균을 에포크의 중간에 저장한다는 의미입니까? 기차를 시작하기 전에 한 번 저장하면 훈련하는 동안 왜 모델을 저장해야하는지 이해하지 못합니다. 훈련을 다시 시작하려면 마지막으로 완료 한 시간대의 가중치로 다시 훈련을 시작해야합니다. 내 의견으로는 save_weights_only가 유용하지 않습니까? 항상 참이어야합니다. 훈련 중에 모델을 저장하고 싶은 경우를 실제로 찾을 수는 없습니까? –

+0

@StavBodik 그것은 신기원의 중간에 있지 않으며 보통 하나의 끝에 있습니다. 저장된 이동 평균으로 시작하지 않으면 훈련이 불안정하거나 다를 수 있습니다. –

+0

그러나 무게는 어쨌든 저장됩니다. 이것은이 체크 포인트의 가장 중요한 기능 중 하나입니다. 왜 훈련 중에 모델을 저장해야합니까? 정의에 의한 모델은 기차에서 변함없는 일정한 것이 있습니다. –