1

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

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

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

define objective (trial):
    k_dis = trial.suggest_uniform('k_dis', 0.0, 5.0)
    l_dis = trial.suggest_uniform('l_dis', 0.0, 5.0)
    k_bound = trial.suggest_uniform('k_bound', 0.0, 5.0)
    l_bound = trial.suggest_uniform('l_bound', 0.0, 5.0) 

    picp = .....
    pinrw = .....


    if picp_train >= 0.8 and pinrw_train < 0.18: 
        cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    else:
        print("error = ")
    return  cwc_train
study = optuna.create_study()
study.optimize(objective, n_trials=100)

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

4

1 回答 1

0

我只想在满足条件的情况下获得 cwc,否则继续试验下一个超参数。

在这种情况下,请提高optuna.structs.TrialPruned而不是返回 cwc_train。请注意,默认采样器 ( TPESampler) 知道修剪后的解决方案,因此它可以降低重新采样的概率。

if picp_train >= 0.8 and pinrw_train < 0.18: 
    cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    return cwc_train
raise optuna.structs.TrialPruned()
于 2019-07-31T02:53:02.787 回答