0

我使用tf.contrib.learn.Estimator來訓練具有20多層的CNN。我正在使用GTX 1080(8 GB)進行培訓。我的數據集不是很大,但是我的GPU的內存不足,批量大於32。因此,我使用批量大小爲16的訓練和評估分類器(GPU在評估時耗盡內存,以及batch_size未指定)。使用TensorFlow驗證監視器的批量大小

# Configure the accuracy metric for evaluation 
    metrics = { 
     "accuracy": 
      learn.MetricSpec(
       metric_fn=tf.metrics.accuracy, prediction_key="classes"), 
    } 

    # Evaluate the model and print results 
    eval_results = classifier.evaluate(
     x=X_test, y=y_test, metrics=metrics, batch_size=16) 

現在的問題是,每隔100步之後,我只會在屏幕上印上訓練損失。我想打印確認損失和準確度一樣,所以我使用的是ValidationMonitor

validation_monitor = tf.contrib.learn.monitors.ValidationMonitor(
     X_test, 
     y_test, 
     every_n_steps=50) 
    # Train the model 
    classifier.fit(
     x=X_train, 
     y=y_train, 
     batch_size=8, 
     steps=20000, 
     monitors=[validation_monitor] 

ActualProblem:我的代碼崩潰(內存不足)當我使用ValidationMonitor,我認爲這個問題可能會如果得到解決我也可以在這裏指定一個批處理大小,我不知道如何做到這一點。我想要ValidationMonitor批量評估我的驗證數據,就像我在使用classifier.evaluate進行培訓後手動完成的那樣,是否有辦法做到這一點?

回答

1

您需要在模型定義中添加config=tf.contrib.learn.RunConfig(save_checkpoints_secs=save_checkpoints_secs)。 save_checkpoints_secs可以更改爲save_checkpoints_steps,但不能同時存在。

+0

歡迎來到Stack Overflow。請參閱答案窗口右上角的「幫助」,瞭解如何格式化代碼。 – Gary99