神经网络的交叉验证:如何对待epoch数?

问题描述 投票:0回答:2

我正在实现一个 pytorch 神经网络(回归),想要确定最好的网络拓扑、优化器等。我使用交叉验证,因为我有 x 个测量数据库,我想评估是否可以使用以下方法训练神经网络x 数据库的子集,并将神经网络应用于未见过的数据库。因此,我还引入了一个测试数据库,在超参数识别阶段我并没有使用它。 我对如何处理交叉验证中的纪元数感到困惑,例如我的纪元数 = 100。有两个选项:

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

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

哪一个选项是正确的或更好的?

python neural-network pytorch cross-validation
2个回答
0
投票

epoch的数量最好不要微调。 选项 2 是更好的选择。 实际上,如果纪元数是固定的,则不需要验证集。验证集为您提供已保存模型的最佳时期。


0
投票

选项 2 是更好的选择。我建议使用提前停止功能进行 5 倍或 10 倍交叉验证,以便在验证损失停止减少时停止训练,从而确定最佳的 epoch 数。这将防止过度拟合。在所有数据上训练的最终模型的历元数将固定为交叉验证期间发现的平均历元数。

© www.soinside.com 2019 - 2024. All rights reserved.