问题标签 [optuna]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
620 浏览

python - 如何使用 optuna 或 hyperopt 调整条件目标函数

我尝试使用 optuna 来调整超参数。但是我的目标函数是有条件的,这会在获得最佳参数方面产生问题。

我只想在满足条件的情况下获得 cwc,否则继续试验下一个超参数。但我想因为条件不满足并且目标函数重新运行 cwc 它给出了错误

UnboundLocalError:分配前引用的局部变量“cwc_train”

UnboundLocalError:分配前引用的局部变量“cwc_train”

0 投票
1 回答
181 浏览

optuna - 如何将学习率与修剪相匹配?

该问题的背景是通过study.optimize()启用默认修剪和学习率作为优化参数来优化神经网络训练的超参数(这个问题可以推广到其他超参数)。

高学习率最初可以产生良好的结果,最初基本上每个中间步骤都会降低损失,但会导致最终结果不佳。

低学习率可能会产生较差的初始结果,但会产生更好的最终值。

启用剪枝后,低学习率不会因为中间结果差而被剪枝吗?这意味着最终的最佳参数将被错误地选择?

如何解决?使用另一个修枝剪有帮助吗?谢谢!

0 投票
1 回答
554 浏览

python - 如何修复错误“'_BaseUniformDistribution' 对象没有属性 'to_internal_repr'” - optuna 中的奇怪行为

我正在尝试在 Python 中使用 optuna lib 来优化推荐系统模型的参数。这些模型是自定义的,看起来像标准的拟合预测 sklearn 模型(使用 get/set params 方法)。

我做什么:从统一的int分布中选择两个参数的简单目标函数,将这些参数设置为模型,预测模型(没有拟合阶段,因为它是仅在预测阶段使用参数的简单模型)并计算一些度量。

我得到了什么:第一次试验运行正常,它对参数进行采样并将结果打印到日志中。但是在第二次和下一次试验中,我遇到了一些我无法解决或谷歌的奇怪错误(请看下面的代码)。当我只进行 1 次试验时,一切都很好。

我尝试过:重新排列目标函数的各个部分,将 fit 阶段放入其中,尝试计算更简单的指标 - 没有任何帮助。

这是我的目标函数:

这就是我在三个试验中得到的:

我不明白问题出在哪里以及为什么第一次试验有效。请帮忙。

谢谢!

0 投票
1 回答
365 浏览

optuna - 我可以同时优化分布式多个模型吗?

我知道我可以使用Optuna进行分布式优化。但是,我不知道我是否可以同时使用多个模型?

例如:

然后在example1.py中:

然后在example2.py中:

0 投票
2 回答
1749 浏览

python - 如何在 optuna 中采样参数而不重复?

我正在使用 optuna 对我的自定义模型进行参数优化。

有没有办法对参数进行采样,直到当前的参数集之前没有测试过?我的意思是,如果过去有一些使用相同参数集的试验,请尝试对另一个参数进行采样。

在某些情况下,这是不可能的,例如,当存在分类分布并且n_trials大于可能的唯一采样值的数量时。

我想要的是:有一些配置参数num_attempts,以便num_attempts在 for 循环中对参数进行采样,直到有一个之前没有测试过的集合,否则 - 在最后一个采样的集合上运行试验。

为什么我需要这个:仅仅因为在相同参数上多次运行重型模型的成本太高。

我现在做什么:只做这个“for-loop”的东西,但它很乱。

如果有另一种聪明的方式来做到这一点 - 将非常感谢信息。

谢谢!

0 投票
1 回答
488 浏览

python - Optuna 示例返回测试集的评估指标是否存在缺陷?

我正在使用 Optuna 对某些模型进行参数优化。

在几乎所有示例中,目标函数都会返回测试集上的评估指标,并尝试最小化/最大化它。我觉得这是示例中的一个缺陷,因为 Optuna 然后根据看不见的数据优化了她的参数。

对训练集的 cv 进行优化会更加稳健。想听听其他想法并检查我是否遗漏了什么。

谢谢!

0 投票
2 回答
1977 浏览

python - 有没有办法将参数传递给 optuna 中的多个工作?

我正在尝试使用 optuna 搜索超参数空间。

在一个特定的场景中,我在一台带有几个 GPU 的机器上训练一个模型。模型和批量大小允许我每 1 个 GPU 运行 1 次训练。因此,理想情况下,我想让 optuna 将所有试验分布在可用的 GPU 上,以便每个 GPU 上始终运行 1 个试验。

在它说的文档中,我应该在一个单独的终端中为每个 GPU 启动一个进程,例如:

我想避免这种情况,因为在那之后整个超参数搜索会继续进行多轮。我不想总是手动启动每个 GPU 的进程,检查所有进程何时完成,然后开始下一轮。

我看到study.optimize有一个n_jobs说法。乍一看,这似乎是完美的。 例如我可以这样做:

这会启动多个线程,每个线程都开始训练。但是,内部的培训师objective不知何故需要知道它应该使用哪个 GPU。有什么诀窍可以做到这一点吗?

0 投票
2 回答
221 浏览

python - 将一组特定的参数强制到抽样批次中

我正在尝试使用 Optuna 在 ML 算法中测试不同的参数集。

Optuna 的自动采样非常有用,但是有没有办法将一组特定的参数强制放入 Optuna 定义的建议批次中?

例如,如果我有 ax,y 参数:

我还想将一组 x=0.1, y=0.2 定义为自动生成的一组。这可能吗?

将某些 ML 算法的“直观”值与其他值进行比较可能会很有趣。

0 投票
3 回答
6058 浏览

python - Python:如何从 Optuna LightGBM 研究中检索最佳模型?

我想获得最好的模型,以便稍后在笔记本中使用来预测使用不同的测试批次。

可重现的示例(取自 Optuna Github):

我的理解是,下面的研究将调整准确性。我想以某种方式从研究中检索最佳模型(不仅仅是参数)而不将其保存为泡菜,我只想在笔记本的其他地方使用该模型。

所需的输出将是

0 投票
1 回答
292 浏览

scikit-learn - roc_auc_score, 'roc_auc', 'auc' 的奇怪行为

在优化 xgboost 的参数时,我遇到了 roc_auc_score 指标的问题。与训练数据的结果相比,我在交叉验证期间得到了显着不同的结果。

运行代码后:

我收到了:

所以结果大约是 0.8(train-auc-mean 0.796818)。之后运行:

我收到了:

所以这是不可能的。我也尝试使用自定义功能:

并将它们传递fevalxgb.cv,设置param['disable_default_eval_metric'] = 1和不定义指标,结果是相同的。

然后我尝试使用 RandomizedSearchCV:

输出是:

所以仍然是同样的问题:在交叉验证期间得分约为 0.8,之后为 0.6。我想使用不同的指标。

我找到的解决方案是传入 RandomizedSearchCV: scoring=make_scorer(roc_auc_score)。这解决了在交叉验证中给出相同结果的问题,之后大约为 0.6。

谁能解释问题是什么,因为我仍然不明白?而且我仍然不知道如何使用 optuna 优化来解决它。