【问题标题】:initialization neural network model kfold初始化神经网络模型kfold
【发布时间】:2019-11-13 22:57:45
【问题描述】:

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

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

【问题讨论】:

    标签: python model neural-network training-data


    【解决方案1】:

    这取决于你所说的“初始化网络”是什么意思,你应该展示一些sn-p代码让人们理解你的问题。

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

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

    通过这样做,您将对模型的错误/性能有 k 个不同的估计值。

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

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

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

    希望对你有帮助

    【讨论】:

    • 好的,这基本上回答了我的问题,我训练了 k 个不同的模型。如果我现在完成训练,我是从 k 个分割中随机选择我的模型,还是寻找最小的验证错误并采用这个模型?
    • 你可以选择最好的,但记住这是一种验证策略,这意味着你不要使用交叉验证来选择模型,你只是用它来更好地评估模型避免问题喜欢Selection Bias。如果你想选择一个模型,你应该做的是:1)创建一组你想尝试的参数(如层数,每层神经元的数量等)2)用这些参数的不同组合运行不同的训练,每个都用 crossval 评估。 3)选择性能最好的模型
    • 在训练之前你应该做很多事情,但如果你只是想选择一个模型,这就是概述
    猜你喜欢
    • 2016-01-19
    • 2021-07-20
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多