首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Optuna中有没有等同于hyperopts lognormal的东西?

在Optuna中有没有等同于hyperopts lognormal的东西?
EN

Stack Overflow用户
提问于 2021-01-18 20:09:49
回答 1查看 92关注 0票数 0

我正在尝试使用Optuna对我的模型进行超参数调整。

我被困在一个地方,我想定义一个具有对数正态/正态分布的搜索空间。这在使用hp.lognormalhyperopt中是可能的。可以使用Optuna的现有suggest_ api的组合来定义这样的空间吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-23 14:13:18

您也许可以利用suggest_float(..., 0, 1)的逆转换(即U(0,1)),因为Optuna目前不直接为这两个发行版提供suggest_变体。此示例可能是一个起点https://gist.github.com/hvy/4ef02ee2945fe50718c71953e1d6381d请查找以下代码

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
from scipy.special import erfcinv

import optuna


def objective(trial):
    # Suggest from U(0, 1) with Optuna.
    x = trial.suggest_float("x", 0, 1)

    # Inverse transform into normal.
    y0 = norm.ppf(x, loc=0, scale=1)

    # Inverse transform into lognormal.
    y1 = np.exp(-np.sqrt(2) * erfcinv(2 * x))

    return y0, y1


if __name__ == "__main__":
    n_objectives = 2  # Normal and lognormal.

    study = optuna.create_study(
        sampler=optuna.samplers.RandomSampler(),
        # Could be "maximize". Does not matter for this demonstration.
        directions=["minimize"] * n_objectives,
    )
    study.optimize(objective, n_trials=10000)

    fig, axs = plt.subplots(n_objectives)
    for i in range(n_objectives):
        axs[i].hist(list(t.values[i] for t in study.trials), bins=100)
    plt.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65774253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档