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

Cross-validation of neural network: How to treat the number of epochs?

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

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

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

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

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