将批量大小与 TensorFlow Validation Monitor 结合使用

Using batch size with TensorFlow Validation Monitor

我正在使用 tf.contrib.learn.Estimator 来训练具有 20 层以上的 CNN。我正在使用 GTX 1080 (8 GB) 进行训练。我的数据集不是很大,但我的 GPU 内存不足,批量大小大于 32。所以我使用批量大小 16 来训练和评估分类器(GPU 在评估时内存不足,如果 batch_size 未指定)。

  # 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]

实际问题: 我的代码在使用 ValidationMonitor 时崩溃(内存不足),我认为如果我可以在此处指定批处理大小,则问题可能会得到解决好吧,我不知道该怎么做。我想要 ValidationMonitor 批量评估我的验证数据,就像我在使用 classifier.evaluate 训练后手动执行的那样,有没有办法做到这一点?

ValidationMonitor's constructor 接受一个 batch_size arg,应该可以解决问题。

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