"do something" 当 Optuna 找到新的最佳参数时

"do something" when Optuna finds new best parameters

我有一个神经网络,我在其中使用 Optuna 来寻找一些最佳超参数,例如批量大小等

我想在 Optuna 找到新的最佳参数组合时保存网络参数。

我试过以下两种方法:

SCORE = 0
def objective(trial):
    BATCH_SIZE = trial.suggest_int("BATCH_SIZE",20,100)
    LEARNING_RATE = trial.suggest_float("LEARNING_RATE",0.05,1)
    DROPOUT = trial.suggest_float("DROPOUT",0.1,0.9)

    Y_SCORE,Y_VAL = train_NN(X,y,word_model,BATCH_SIZE,250,LEARNING_RATE,DROPOUT)
    y_val_pred = Y_SCORE.argmax(axis=1)
    labels = encode.inverse_transform(np.arange(6))
    a = classification_report(Y_VAL, y_val_pred,zero_division=0,target_names=labels,output_dict=True)
    score = a.get("macro avg").get("f1-score")
    if score>SCORE: #New best weights found - save the net-parameters
        SCORE = score
        torch.save(net,"../model_weights.pt")
    return score

UnboundLocalError: local variable 'SCORE' referenced before assignment 而失败,但如果我将 SCORE=0 移动到顶部的函数内,它会在每次试验时重置。

我想立即保存权重的原因,而不仅仅是 运行 最后 study.best_params 的另一次训练,是有时权重的随机初始化会产生影响并给出更高的分数(尽管如果训练很稳健,应该不会有什么不同)——但这不是 point/the 问题。

有助于保存神经网络的权重;我们可以使用回调函数来保存模型的检查点。