【问题标题】:train, dev set and test set advices for implementation and hyperameter tuning用于实施和超参数调整的训练、开发集和测试集建议
【发布时间】:2019-08-11 20:16:19
【问题描述】:

我对使用经典的训练集、验证集和测试集来实现和调优参数和超参数有一些疑问。因此,如果有人能澄清这些概念并为我提供一些关于它在 Python 等语言中实现的提示,那将是非常有帮助的。

例如,如果我有一个神经网络,就我所知的参数调整(让我们考虑每层隐藏层和神经元的数量),可以使用训练集进行调整。因此,当涉及到大约 20% 的数据集的验证集时,我可以使用以下算法调整我的超参数:

示例:调整批量大小和学习率:

hyperListB=[]
hyperListL=[]

//let´s suppose both lists have the same dimensions
for i in range(0,hyperListB):
   model=fit(train_set,hyperListB[i],hyperlistL[i]
   values[].add(evaluate(model,validation_set)  //add scores of each run
end for

for i in range(0,values):
   plot_loss_functions(values)

select best set of hyperparameters

model=fit(test_set, selecter_hyperparameters)
evaluate(model)

这个步骤顺序正确吗?我已经搜索了不同的页面,但没有找到可以帮助我解决这个问题的东西。请记住,我不想使用交叉验证或其他基于库的技术,例如 GridSearchCV。

谢谢

【问题讨论】:

    标签: machine-learning


    【解决方案1】:

    在训练验证测试拆分中,训练数据上的拟合方法。

    验证数据用于超参数调整。选择一组超参数,并在训练集上训练模型。然后这个模型将在验证集上进行评估。重复此过程,直到用尽不同超参数的所有排列。

    最佳超参数集是在验证集上给出最佳结果的超参数。这种方法称为网格搜索。

    测试集用于评估选择了最佳超参数的模型。这给出了最终的无偏精度和损失。 永远不会在验证集或测试集上调用 fit 方法。

    您的示例将如下所示:

    hyperListB=[]
    hyperListL=[]
    
    //let´s suppose both lists have the same dimensions
    for hyperB in hyperListB:
        for hyperL in hyperListL:
            model=fit(train_set,hyperB,hyperL)
            values[].add(evaluate(model,validation_set)  //add scores of each run
         end for
    end for
    for i in range(0,values):
       plot_loss_functions(values)
    
    select best set of hyperparameters
    
    evaluate(model,test_set)
    

    【讨论】:

      猜你喜欢
      • 2023-02-12
      • 2017-09-11
      • 2017-11-01
      • 1970-01-01
      • 2013-06-18
      • 2015-01-17
      • 2019-08-15
      • 2020-06-01
      • 2012-12-04
      相关资源
      最近更新 更多