Optuna:"The reported value is ignored because this `step` {} is already reported."的原因是什么



我开始使用Optuna,在第二轮或第三轮,我的控制台收到了如下消息:

UserWarning: The reported value is ignored because this `step` 438 is already reported.

大约有2400个;步骤1";并向上。使用

optuna.logging.set_verbosity(optuna.logging.ERROR)

没有解决问题。此线程表明UserWarnings通常可能不受日志记录限制。

(至少对我来说(从深入研究代码中还不清楚是什么导致了这个警告。

鉴于引用文章中的过程,此消息的原因是objective()函数内的循环。在第一个循环中,LightGBMPruningCallback向Optuna报告中间迭代结果,这些结果是决定是否应该修剪试验所需的。对于第二次运行,回调将再次报告已经报告的迭代的值。出现错误的原因是,对于Optuna,似乎在单个试验中,记录了相同迭代的LightGBMPruningCallback的n(=折叠数(值。

随着迭代次数的增加,梯度过程中的步骤平均值也不错,因此当Optuna通常报告损失值递减时。由于回调监视并报告它们,因此不应该为同一迭代(1、2、3…(报告冗余值

您可以通过只在第一个折叠中调用LightGBMPruningCallback而不调用其他折叠来解决此问题,因此使用类似的方法

for idx, (train_idx, test_idx) in enumerate(cv.split(X, y)):
[...]
if idx == 0:
*calling the callback*
else:
*without calling the callback*

当对第一个折叠进行训练时,这应该会触发回调,并且应该抑制进一步折叠的进一步报告。缺点是,你只能通过观察第一次折叠的训练行为来确定是否应该修剪试验[…]

在Optuna试验中进行交叉验证时,我个人不使用LightGBMPruningCallback

希望这能有所帮助。

相关内容

最新更新