我试图在神经网络训练中理解 'epochs'。接下来的实验是等价的吗?
I am trying to understand 'epochs' in neural network training. Are the next experiments equivalent?
假设我有一个定义的神经网络的训练样本(带有相应的训练标签)(神经网络的架构对于回答这个问题无关紧要)。让我们调用神经网络 'model'.
为了不造成任何误解,假设我介绍了 'model' 的初始权重和偏差。
实验一
我使用训练样本和训练标签训练 'model' 40 个时期。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB_Final_experiment1.
实验二
我使用训练样本和训练标签训练 'model' 20 个时期。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB_Intermediate.
现在我在 'model' 中引入 WB_Intermediate 并训练另外 20 个 epoch。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB__Final_experiment2.
注意事项。每个参数、超参数、激活函数、损失函数……对于两个实验都完全相同,除了 epochs。
问题:WB_Final_experiment1和WB__Final_experiment2完全一样吗?
如果您所做的操作完全是确定性的,那么是的。 Epochs 被实现为围绕训练算法的 for 循环的迭代次数。您可以在 PyTorch 的实现中看到这一点。
通常不会,模型权重不会相同,因为优化会在训练期间累积其自身的值。您也需要保存这些内容才能真正从中断的地方继续。
请参阅有关保存和恢复的 Pytorch 文档 here。但这个概念并不局限于Pytorch框架。
具体来说:
It is important to also save the optimizer’s state_dict, as this
contains buffers and parameters that are updated as the model trains.
如果您遵循本教程 here,您会发现两个实验的结果如下所示 -
实验 1
实验二
在第一个实验中,模型 运行 进行了 4 个时期,在第二个实验中,模型 运行 进行了 2 个时期,然后使用先前训练的最后权重再训练 2 个时期。您会发现结果会有所不同,但变化幅度很小。由于权重的 运行domized 初始化,它们总是会有所不同。但是两个模型的预测将非常接近。
如果模型使用相同的权重初始化,那么两个模型在 4 个 epoch 结束时的结果将保持相同。
另一方面,如果您训练了 2 个时期,然后关闭您的训练课程并且不会保存权重,如果您在重新开始课程后现在训练 2 个时期,则预测将不一样。为避免在训练前出现这种情况,请始终加载保存的权重以使用 model.load_weights("path to model")
.
继续训练
TL;DR
如果使用完全相同的权重初始化模型,则相同训练时期结束时的输出将保持不变。如果它们是 运行domly 初始化的,输出只会略有不同。
假设我有一个定义的神经网络的训练样本(带有相应的训练标签)(神经网络的架构对于回答这个问题无关紧要)。让我们调用神经网络 'model'.
为了不造成任何误解,假设我介绍了 'model' 的初始权重和偏差。
实验一
我使用训练样本和训练标签训练 'model' 40 个时期。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB_Final_experiment1.
实验二
我使用训练样本和训练标签训练 'model' 20 个时期。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB_Intermediate.
现在我在 'model' 中引入 WB_Intermediate 并训练另外 20 个 epoch。训练后,神经网络将对整个神经网络具有一组特定的权重和偏差,我们称之为 WB__Final_experiment2.
注意事项。每个参数、超参数、激活函数、损失函数……对于两个实验都完全相同,除了 epochs。
问题:WB_Final_experiment1和WB__Final_experiment2完全一样吗?
如果您所做的操作完全是确定性的,那么是的。 Epochs 被实现为围绕训练算法的 for 循环的迭代次数。您可以在 PyTorch 的实现中看到这一点。
通常不会,模型权重不会相同,因为优化会在训练期间累积其自身的值。您也需要保存这些内容才能真正从中断的地方继续。 请参阅有关保存和恢复的 Pytorch 文档 here。但这个概念并不局限于Pytorch框架。
具体来说:
It is important to also save the optimizer’s state_dict, as this contains buffers and parameters that are updated as the model trains.
如果您遵循本教程 here,您会发现两个实验的结果如下所示 -
实验 1
实验二
在第一个实验中,模型 运行 进行了 4 个时期,在第二个实验中,模型 运行 进行了 2 个时期,然后使用先前训练的最后权重再训练 2 个时期。您会发现结果会有所不同,但变化幅度很小。由于权重的 运行domized 初始化,它们总是会有所不同。但是两个模型的预测将非常接近。
如果模型使用相同的权重初始化,那么两个模型在 4 个 epoch 结束时的结果将保持相同。
另一方面,如果您训练了 2 个时期,然后关闭您的训练课程并且不会保存权重,如果您在重新开始课程后现在训练 2 个时期,则预测将不一样。为避免在训练前出现这种情况,请始终加载保存的权重以使用 model.load_weights("path to model")
.
TL;DR
如果使用完全相同的权重初始化模型,则相同训练时期结束时的输出将保持不变。如果它们是 运行domly 初始化的,输出只会略有不同。