神经网络的交叉验证:如何处理时期数?

时间:2020-04-29 14:33:26

标签: python neural-network pytorch cross-validation

我正在实现pytorch神经网络(回归),并希望确定最佳的网络拓扑,优化器等。我使用交叉验证,因为我有x个测量数据库,并且我想评估我是否可以训练神经网络与x数据库的子集进行网络连接,并将神经网络应用于看不见的数据库。因此,我还介绍了一个测试数据库,该数据库在超参数识别阶段不使用。 我对如何在交叉验证中处理时期数感到困惑,例如我的时代数=100。有两种选择:

  1. 时期数是要调整的超参数。在每个时期中,确定所有交叉验证迭代中的平均误差。在使用所有网络拓扑,优化器等对模型进行训练之后,将确定平均误差最小的模型,并具有以下参数:
    -网络拓扑:1
    -optimizer:SGD
    -纪元数:54
    为了计算测试集上的性能,使用训练和验证数据上的这些参数(历元数= 54)来精确训练模型。然后将其应用于测试集并进行评估。

  2. 时期数不是要调整的超参数。使用所有网络拓扑,优化器等对模型进行训练。对于每个模型,都使用误差最小的时期数。比较模型,并可以通过以下参数确定最佳模型:
    -网络拓扑:1
    -optimizer:SGD
    为了计算测试数据的性能,使用了“简单”的训练和验证划分(例如80-20)。使用上述参数和训练和验证数据上的100个时期来训练模型。最后,在测试数据上评估了一个具有最小验证误差的历元的模型。

哪个选项是正确的还是更好的?

1 个答案:

答案 0 :(得分:0)

最好不要对时代数进行微调。 选项2是更好的选择。 实际上,如果时期数是固定的,则无需设置验证。验证集可为您提供保存模型的最佳时期。