【发布时间】:2016-08-29 23:53:47
【问题描述】:
h2o.deeplearning() 默认开启提前停止。但是,从 R 中,我如何知道它是否提前停止,以及它停止了多少个时期?我试过这个:
model = h2o.deeplearning(...)
print(model)
它告诉我有关层、MSE、R2 等的信息,但不告诉我运行了多少个 epoch。
在 Flow 上,我可以看到信息(例如,x 轴在“评分历史 - 偏差”图表或评分历史表中停止的位置)。
【问题讨论】:
h2o.deeplearning() 默认开启提前停止。但是,从 R 中,我如何知道它是否提前停止,以及它停止了多少个时期?我试过这个:
model = h2o.deeplearning(...)
print(model)
它告诉我有关层、MSE、R2 等的信息,但不告诉我运行了多少个 epoch。
在 Flow 上,我可以看到信息(例如,x 轴在“评分历史 - 偏差”图表或评分历史表中停止的位置)。
【问题讨论】:
如果您的模型被称为 m,那么仅获取训练的 epoch 数:last(m@model$scoring_history$epochs)
要查看可用的其他信息(实际上就是您在 Flow 界面中可以看到的所有信息)以及如何访问它,请使用 str(m)
还要注意这个命令:summary(m) 除了print(m) 显示的内容之外,它还添加了这个部分(对于深度学习模型):
Scoring History:
timestamp duration training_speed epochs iterations samples training_MSE training_deviance training_r2
1 2016-04-14 11:35:46 0.000 sec 0.00000 0 0.000000
2 2016-04-14 11:35:52 5.218 sec 15139 rows/sec 10.00000 1 77150.000000 0.00000 0.00000 0.07884
...
7 2016-04-14 11:36:18 31.346 sec 25056 rows/sec 100.00000 10 771500.000000 0.00000 0.00000 0.72245
即您可以通过查看最后一行来查看 epoch 的总数。
顺便说一句,当应用于数据帧时,这与 h2o 的 summary() 命令不同;在这种情况下,它的行为类似于 R 的内置汇总函数,并显示数据框中每一列的统计信息。
【讨论】:
我很有信心地说,达伦库克的答案只有在overwrite_with_best_model=FALSE 时才有效。无论如何,这个参数默认设置为TRUE,所以前面的答案可能会很误导,因为你可以部分找到here。您可以在以下输出中检查我的意思,使用 h2o.grid 调整网络并按照 Darren 的建议使用 m@model$scoring_history。
epochs validation_classification_error
0.00000 0.46562
1.43150 0.50000
100.31780 0.46562
如您所见,如果 overwrite_with_best_model=TRUE 函数在最后一次迭代中保存了最佳模型,则 Darren 的解总是对应于最大时期数。假设您正在调整模型,我推荐以下解决方案:
epochsList = m@model$scoring_history$epochs
bestEpochIndex = which.min(m@model$scoring_history$validation_classification_error)
bestEpoch = epochsList[bestEpochIndex]
print(sprintf("The best epoch is: %d", bestEpoch))
【讨论】: