我尝试使用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”
最佳答案
我只想在满足条件的情况下获得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()