"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 问题。
有助于保存神经网络的权重;我们可以使用回调函数来保存模型的检查点。
我有一个神经网络,我在其中使用 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 问题。