将批量大小与 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,但不能同时更改。
我正在使用 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,但不能同时更改。