0

我有一个神经网络,我在其中使用 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最后进行另一次训练的原因是,有时权重的随机初始化会产生影响并给出更高的分数(尽管如果训练是稳健的,它不应该有所作为)-但这不是重点/问题。

4

1 回答 1

1

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

于 2021-08-03T14:15:29.957 回答