问题标签 [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 投票
0 回答
38 浏览

python - optuna风电场优化

在下面的代码中,我想使用 optuna 优化目标函数。

问题是最初的猜测是 c ,它是一个数组(9,360,23)。但是当我运行以下代码时,我 print(f"Best params: {study.best_params}")只需要打印 9 个 c 值,9*360*23所以我认为它只是更改了这 9 个值,而不是所有c值。我也尝试过另一种写 c 的方法,如下所示:

但是这样一来,代码会在7,8次迭代后因为内存问题而停止。我也使用大学服务器完成了这项工作,所以我认为它会有问题。所以现在我想知道有没有办法c在优化中应用所有值?我的意思是,不仅仅是改变其中的 9 个值,而是改变所有这些值。

0 投票
1 回答
61 浏览

python - 由于参数子空间无效,如何手动终止 Optuna 试验?

在 Optuna 中调整参数时,我的可能参数空间中有一个无效的子空间。在我的特殊情况下,如果我正在调整的两个参数都接近零(< 1e-5),则它们可能会导致极长时间的试验(我想避免),即:

A > 1e-5 A < 1e-5
B > 1e-5 好的 好的
B < 1e-5 好的 暂停

当 A < 1e-5 和 B < 1e-5 时,我显然能够捕捉到这种极端情况,但是我应该如何让 Optuna 知道这是一次无效的试验?我不想更改 A 和 B 的采样范围以排除 < 1e-5 的值,因为如果 A 和 B 中只有一个小于 1e-5 就可以了。

到目前为止,我有两个想法:

  1. 引发 Optuna 修剪异常optuna.exceptions.TrialPruned。这将在代码超时之前修剪试验,但我不确定这是否会告诉 Optuna 这是要评估的搜索空间的糟糕区域。如果它确实引导调整远离这种边缘情况,那么我认为这是最好的选择。

  2. 返回一些固定的试验分数,例如 0。我知道我的试验的分数在 0 和 1 之间,因此如果达到这个无效的边缘情况,我可以返回可能的最低分数 0。但是,如果大多数试验分数是 0.5 或更大,则边缘情况的值 0 成为极端异常值。

MWE:

我发现了这个相关问题,它建议根据已采样的现有值更改采样过程。在 MWE 中,这看起来像:

但是,在测试时,这会产生以下警告:

RuntimeWarning:名称为“b”的分布参数值不一致!这可能是配置错误。Optuna 允许在试用中多次调用具有相同名称的相同发行版。当参数值不一致时,optuna 仅使用第一次调用的值并忽略所有后续调用。使用这些值:{'low': 0.1, 'high': 1.0}。>

所以这似乎不是一个有效的解决方案。

在 MWE 中,提高修剪异常是有效的,并且找到了(接近)最优值。似乎在写这个问题时我自己几乎已经回答了修剪是要走的路,除非有更好的解决方案?

0 投票
1 回答
42 浏览

deep-learning - 使用 Optuna 和修剪的每个超参数验证的多次训练/多次 NN 初始化

我正在做我的第一个 ML-with-optuna 项目。我的问题是如何为多个 NN 初始化探测一组超参数,在一次试验中的每次运行仍然需要修剪?

我假设初始化有相当大的影响,我不想因为运气不好而剔除好的HP。

据我所知,每个试验代表一组 HP。因此,如果我想对它们进行多次初始化评估,我会在每次试验中执行多次训练。但在一次试验中,我只能为每个时间戳报告一个值。

我必须在没有 optuna 的情况下实现这个吗?我是否应该采用一种方法,让 optuna 首先建议一组 HP,然后为下一次试验修复它?或者你知道用 optuna 实现这一目标的一些好方法吗?

提前谢谢了!

编辑1;添加一个最小的代码示例:

此示例尝试在 0 到 10 的范围内找到“x”,从而最小化“x * 20”。显而易见的答案是 0。目标函数是基于迭代求和计算结果;它使用修剪。遗憾的是,由于随机偏移,目标函数是嘈杂的。这是作为训练 NN 的隐喻。迭代是训练循环,x 是超参数,偏移量是网络的随机初始化。

由噪声引起的问题是您无法确定超参数的质量,因为结果可能由随机偏移量支配。这可能会导致选择次优的 x。如果我是对的,那么增加试验次数以消除随机性可能不起作用,因为 optuna 可能会建议基于旧超参数的新超参数。所以不幸的观察会阻碍进一步的进展。

因此,我认为最好对同一组 hyperpramters 多次评估目标,并且只记住最好的“运行”。

所以我的问题是如何最好地消除噪音?我的假设是否正确,即仅增加试验次数不是最佳方法,您将如何实施重复评估?

0 投票
0 回答
39 浏览

python - 自定义评分函数出错:“评分必须返回一个数字,得到 tf.Tensor...”

我想为一个简单的多层感知器 Keras 回归器创建一个自定义弹球损失函数。为了调整回归器的超参数,我使用了 OptunaSearchCV(其工作方式类似于 scikit-learn RandomizedSearchCV)。

我认为错误的罪魁祸首是我制作的自定义评分功能。它的功能是,对于每个实例(输入数据的行),计算长度为 3 的预测输出的弹球损失以及相应的分位数目标:0.05、0.5 和 0.95。

我有一个玩具示例来复制错误消息。

这是错误消息:

0 投票
0 回答
19 浏览

lightgbm - Optuna 训练 LightGBM- 试验次数超过了通过的次数

我正在尝试使用 optuna 调整 LightGBM 模型。我的代码写在下面。n_trials 是 20,但在我收到的消息中,它说“试用 26 完成,价值:0.020511123098087614 和参数:{'num_leaves': 134}。最好是试用 12,价值:0.020511123098087614。”。并且还在运行。谁知道为什么还没完结?

0 投票
0 回答
44 浏览

python - 从远程服务器 (Linux) 连接到本地 mysql 数据库 (Mac)

我尝试从远程服务器(Linux)连接到我的本地 MySQL 数据库(在我的 Mac 上)以存储我的超参数优化试验:

但得到这个错误按摩

我将绑定地址更改为 0.0.0.0 (在我的 my.cnf 文件中)

并授予对 mysql 中远程用户的访问权限

我是这个话题的新手,不知道我的方式。非常感谢帮助

0 投票
0 回答
37 浏览

python - 一段时间后或重新开始学习时,Optuna 优化变得非常缓慢

当尝试使用 optuna 优化我的模型时,我遇到了以下问题。第一次试验完成后,它变得非常慢。我正在尝试对 n_jobs=-1 进行 100 次试验。我还注意到,当我尝试恢复学习时,速度非常慢。第一次试验在几个小时内完成,在我恢复研究并让它运行 4 小时后,没有进一步的研究完成。

下面我将写下我昨天创建的研究中试验完成的时间。正如您在前几个小时中看到的那样,很多试验都完成了,但随后变得异常缓慢。距离上一次试炼结束已经过去了 4 个小时,距离之前的试炼结束已经将近 12 个小时。

我不知道是什么原因造成的,所以我把我的优化放在这里。

0 投票
1 回答
40 浏览

performance - 试验 1 失败,因为值 None 无法转换为 float

我正在尝试使用 Optuna 调整额外的树分类器。

我在所有的试验中都收到了这条信息:

[W 2022-02-10 12:13:12,501] 试验 2 失败,因为值 None 无法转换为浮点数。

下面是我的代码。它发生在我所有的试验中。谁能告诉我我做错了什么?

0 投票
0 回答
16 浏览

python - 达到作业时间限制时手动将 optuna 试用状态设置为等待

我在 HPC 设置中部署 Optuna。由于我改变的超参数会影响训练持续时间,因此我面临着将试验报告为 FAILED 的问题,因为已达到工作的时间限制。在我看来,这个问题的最干净的解决方案是将试验状态设置为等待,并在收到 TERM 信号时保存检查点文件。然后可以在下一批试验中完成试验。

有没有办法手动设置状态并防止它被记录为失败?

0 投票
0 回答
15 浏览

optimization - 优化结果的含义

我运行了 Optuna,发现最好的层数是 5。下面是模型生成代码。我的问题是,5 层是否意味着与其有两层(在循环内),不如有 5 层,脉冲循环外的其余层?或者这是否意味着整个模型中的总层数应该是 5。