在Optuna中调整参数时,我的可能参数空间中有一个子空间无效。在我的特定情况下,如果两个参数都接近零(<1e-5(,我正在调整的两个参数可能会导致非常长的试验(我希望避免(,即:
A>1e-5 | A<1e-5 | |
---|---|---|
B>1e-5 | 确定 | |
B<1e-5 | 确定 | 时
看看这个使用botorch采样器约束的optuna示例。
我也一直在考虑这个问题。我的用例是,我想终止目标开始爆炸(发散/失败(的试验。我不能使用提供的修剪器,因为我已经使用了患者中值修剪器(因此我不能同时使用阈值修剪器,除非我定义了自定义修剪器(。
我的代码是这样的:
def objective(trial):
...
#Train loop:
for epoch in range(n_epochs):
for X, y in train_loader:
...
#Handle auto pruning:
trial.report(validation_error_rate, epoch)
if trial.should_prune():
raise optuna.exceptions.TrialPruned()
#Now handle MANUAL pruning
#Prune trial if its validation_error_rate has blown up
if validation_error_rate > 1e3: #astronomically high
raise optuna.exceptions.TrialPruned()
...
我做了两项研究,唯一的区别是我是否包括手动修剪。两者产生相似的CCD_ 1。排名前十的结果是那些没有使用手动修剪的结果。剩下的试验比包括人工修剪的试验要好。
因此,在我看来,手动修剪并不会损害找到的最佳模型。当我重复实验时,它并不总是找到更好的模型,而且似乎对采样器产生了负面影响,因为它的前10个模型通常不太好。总的来说,当没有使用手动修剪时,我更喜欢这组模型。
如果OP有任何新的信息或见解,请分享。
注意:我只进行了几次这样的比较,没有控制随机初始化。