初始化神经网络模型kfold

initialization neural network model kfold

我在k折开始之前初始化了网络模型。

这是否意味着模型训练了第一次,而这个具有训练权重的模型被用于第二次,依此类推?如果最后一折不好,整个模型都不好怎么办?

这取决于你"initialized the network"的意思,你应该展示一些代码片段让人们理解你的问题。

原则上,k 折交叉验证是一种用于更好地估计模型性能的技术。 这个概念很简单,没有k-fold你只是将数据集拆分成train/test,你使用测试集中看不见的样本来估计一个performance/error,但通常数据并不完美,有点脏,所以它"bad" 个样本最终会出现在测试集中,当您使用它们来估计模型的性能时,您会得到一个不代表真实值的值。

为了减少 error/performance 的估计误差,您将数据集分成 k 个均匀分布的折叠,然后训练 k 次新模型(因此权重每次都从头开始初始化),测试每个时间在 k 个不同的 "folds" 之一上,并在数据集的剩余样本上对其进行训练。

通过这样做,您将对模型的 error/performance 有 k 个不同的估计。

如果您想将单个值作为衡量标准,只需对结果进行平均即可。 当然你可以使用结果做任何你喜欢的事情,你可以 SELECT 最好的模型,你可以平均 k 个模型的权重,你可以平均 "top n" 模型权重等等。

所以,回答你的问题,不,你没有保持体重。 在你正在训练的 k 个模型上,其中一个可能是 "bad",但你使用 k-fold 只是为了验证你的模型,而不是为了更好地训练它! 验证后,您可以决定要做什么。 您正在寻找衡量您的模型 "good" 的方法,通过这样做,您可以更加确定您的结果接近真实值。

如果您想使用数据集来减少其他类型的错误(如过度拟合或其他错误),您应该检查集成方法。

希望对您有所帮助