2017-09-05 5 views
1

실험에서 둘러싼 Estimator를 사용할 때 저장할 모델을 선택하는 방법이 있는지 알고 있습니까? 모든 'save_checkpoints_steps'가 있기 때문에 모델은 저장되지만이 모델이 반드시 가장 좋은 것은 아닙니다.Experiment Tensorflow에 저장할 모델을 선택하십시오.

INFO : tensorflow :

def model_fn(features, labels, mode, params): 
    predict = model_predict_() 
    loss = model_loss() 
    train_op = model_train_op(loss, mode)  
    predictions = {"predictions": predict} 

    return tf.estimator.EstimatorSpec(
     mode = mode, 
     predictions = predictions, 
     loss = loss, 
     train_op = train_op, 
    ) 

def experiment_fn(run_config, hparams): 
    estimator = tf.estimator.Estimator(
     model_fn = model_fn, 
     config = run_config, 
     params = hparams 
    ) 

    return learn.Experiment(
     estimator = estimator, 
     train_input_fn = train_input_fn, 
     eval_input_fn = eval_input_fn, 
     eval_metrics = None, 
     train_steps = 1000, 
    ) 

ex = learn_runner.run(
     experiment_fn = experiment_fn, 
     run_config = run_config, 
     schedule = "train_and_evaluate", 
     hparams = hparams 
) 

출력은 다음과 같다. (401)에 체크 포인트 저장 \ model.ckpt.

INFO : tensorflow : global_step/초 : 0.157117 INFO : tensorflow 스텝 = 401 손실 = 2.95048 (636.468 초)

INFO : tensorflow : 06 : 2017-09-05-20 평가에서 시작 07 INFO : tensorflow :. 로부터 파라미터를 복원 \ model.ckpt 401

INFO : tensorflow : 평가 [1/1] INFO : 2017-09-05-20에서 완료 평가 : tensorflow 06 : 09

정보 : 텐서 흐름 : 글로벌 단계에 대한 dict 저장 401 : global_step = 401, 손실 = 7.20411

INFO : tensorflow : 유효성 검사 (401 단계) global_step = 401, 손실 = 7.20411

INFO : tensorflow : 훈련 손실 = 2.95048 단계 = 401 (315.393 초)

정보 : tensorflow : 451에 대한 체크 포인트를 . \ model.ckpt에 저장합니다.

INFO : tensorflow : 11 : 32

INFO : tensorflow :. 로부터 파라미터를 복원 \ model.ckpt-451

INFO : tensorflow : 평가 2017-09-05-20 평가에서 시작 [1/1]

마지막 모델을 저장할 때마다 항상 가장 좋은 것은 아닙니다.

+0

자세한 내용을 입력하십시오. 지금까지 해 온 것을 말해주십시오. 문제는 무엇입니까. 그것이 그렇듯, 당신의 질문은 이해할 수 없습니다. –

답변

2

교육 과정이 중단 된 경우 체크 포인트가 저장됩니다. 체크 포인트가 없으면 처음부터 다시 시작해야합니다. 이것은 훈련에 몇 주가 걸리는 큰 모델의 큰 문제입니다.

교육이 끝나고 모델에 만족하면 (단어가 "가장 좋습니다"), https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#export_savedmodel을 사용하여 모델을 명시 적으로 저장할 수 있습니다. 이 메소드는 Experiemnt을 생성하는 데 사용한 Estimator에 있습니다. 이 방법은 "추론을위한 모델"을 저장하므로 모든 그라디언트 연산이 제거되고 저장되지 않습니다.

편집 : 당신은 추정을 만들 때 통과 RunConfigkeep_checkpoint_every_n_hours 옵션을 사용하여 정기적으로 가장 최근에 더하여 스냅 샷을 저장할 수 있습니다 : 니콜라스의 댓글에 답글 달기합니다. 그런 다음 모델이 10 시간 전에 최상의 성능을 얻은 것으로 확인되면 대략 그 시간부터 스냅 샷을 찾을 수 있습니다.

+3

제가 말하는 것은 1000 에포크라고 가정 해 보도록 모델을 훈련시키는 것입니다.하지만 500에서 유효성 검사 세트의 손실은 훈련 세트의 손실이 계속 감소하는 동안 다시 인상을 시작합니다. 그리고 이것은 남아있는 신 (新) 시대를 유지합니다. 따라서 가장 좋은 모델은 500에서 발생했습니다. 그러나 추정자는 예를 들어 마지막 5 개 모델 만 저장했습니다. 500 개의 모델을 저장하는 대신 (2 회 반복 할 때마다 모델을 저장하는 경우) 저장할 모델을 선택하는 더 좋은 방법이 있습니까? –

+0

대답을 편집했습니다 – iga

+0

당신의 편집은 실제로 그의 질문에 답변하지 못했습니다. 추가 저장에 대한 조건 (최저 유효성 검사 손실)을 어떻게 든 결정할 수 있습니까? – erickrf