2017-09-05 87 views
1

您是否知道在使用包含在實驗中的Estimator時是否有方法來選擇保存哪個模型?因爲每個'save_checkpoints_steps',模型都被保存,但這個模型不一定是最好的。選擇保存在實驗中的模型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 
) 

輸出如下:

信息:tensorflow:保存爲401檢查站進入\ model.ckpt。

INFO:tensorflow:global_step /秒:0.157117 INFO:tensorflow:步驟401 =, 損耗= 2.95048(636.468秒)

INFO:tensorflow:06:在 2017-09-05-20開始評價:07信息:tensorflow:從 恢復參數\ model.ckpt-401

INFO:tensorflow:評估[1/1] INFO:tensorflow:成品評價 在2017-09-05-20:06:09

信息:tensorflow:保存字典爲全球步 401:global_step = 401,損耗= 7.20411

INFO:tensorflow:驗證(步驟401): global_step = 401,損耗= 7.20411

INFO:tensorflow:訓練損失= 2.95048,步長= 401(315.393秒)

INFO: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明確地保存它。調用此方法在您用來創建ExperiemntEstimator上。請注意,此方法保存了「推理模型」,這意味着所有漸變操作將從其中剝離並保存。

編輯:在回覆尼古拉斯的評論: 可以使用keep_checkpoint_every_n_hours選項爲您創建一個估計,當通過RunConfig定期保存在除了最近期的快照。如果您發現10小時前您的模型達到了最佳性能,那麼您應該能夠大致找到當前的快照。

+3

我的意思是我訓練模型讓我們說1000個時期,但在500時,驗證集的損失再次開始加大,而訓練集的損失持續下降。這保留了其餘的時代。因此,最好的模型發生在500.但估計者只保存了最後的5個模型。除了保存500個模型(如果每隔2次迭代保存模型),是否有更好的方法來選擇保存或不保存模型? –

+0

編輯答案 – iga

+0

你的編輯沒有真正回答他的問題,這也是我的問題。你能以某種方式確定一個條件(如最低的驗證損失)的額外保存? – erickrf

相關問題