gpt4 book ai didi

python - 如何在 optuna 中对参数进行不重复的采样?

转载 作者:行者123 更新时间:2023-11-30 21:54:40 24 4
gpt4 key购买 nike

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

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

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

我想要的:有一些配置参数,例如num_attempts,以便在for循环中对最多num_attempts的参数进行采样,直到有一组之前未测试过的参数, else - 对最后一个采样集运行试验。

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

我现在所做的:只是做这个“for-loop”的东西,但它很困惑。

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

谢谢!

最佳答案

据我所知,目前没有直接的方法来处理您的案件。作为解决方法,您可以检查参数重复并跳过评估,如下所示:

import optuna

def objective(trial: optuna.Trial):
# Sample parameters.
x = trial.suggest_int('x', 0, 10)
y = trial.suggest_categorical('y', [-10, -5, 0, 5, 10])

# Check duplication and skip if it's detected.
for t in trial.study.trials:
if t.state != optuna.structs.TrialState.COMPLETE:
continue

if t.params == trial.params:
return t.value # Return the previous value without re-evaluating it.

# # Note that if duplicate parameter sets are suggested too frequently,
# # you can use the pruning mechanism of Optuna to mitigate the problem.
# # By raising `TrialPruned` instead of just returning the previous value,
# # the sampler is more likely to avoid sampling the parameters in the succeeding trials.
#
# raise optuna.structs.TrialPruned('Duplicate parameter set')

# Evaluate parameters.
return x + y

# Start study.
study = optuna.create_study()

unique_trials = 20
while unique_trials > len(set(str(t.params) for t in study.trials)):
study.optimize(objective, n_trials=1)

关于python - 如何在 optuna 中对参数进行不重复的采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com