我对使用经典训练,验证和测试集来实现和调整参数和超参数存有疑问。因此,如果有人可以向我阐明这些概念并为我提供一些以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。
谢谢
答案 0 :(得分:0)
在Train验证测试中,对火车数据进行拟合的方法。
验证数据用于超参数调整。选择一组超参数,然后在训练集中训练模型。然后,将在验证集上评估此模型。重复此过程,直到用完所有不同超参数的排列。
最好的超参数集是在验证集上给出最佳结果的参数。这种方法称为网格搜索。
测试集用于评估具有最佳超参数的模型。这给出了最终的无偏精度和损失。 在验证或测试集上永远不会调用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)