【问题标题】:Retrain your CNN model successifely with two different datasets用两个不同的数据集重新训练你的 CNN 模型
【发布时间】:2020-08-12 07:22:57
【问题描述】:

我已经实现了一个 CNN,它有 3 个卷积层,每个层之后都有 Maxpooling 和 dropout 我注意到,当我第一次训练模型时,它给了我 88% 的测试准确率,但在连续第二次重新训练后,使用相同的训练数据集,它给了我 92% 的测试准确率。

我无法理解这种行为,是否模型在第二次训练过程中出现过拟合?

提前感谢您的帮助!

【问题讨论】:

  • 这可能很少见,但仍有可能:当您重新训练它时,您是否再次初始化模型?
  • 能否给我们提供一些MRE的脚本,以便我们为您提供适当的帮助?
  • 不,我没有初始化模型

标签: python tensorflow keras neural-network


【解决方案1】:

如果您没有在 R 语言中提供种子编号 set.seed( ) 或在 python 中提供 tf.random.set_seed(any_no.) ,则很有可能

【讨论】:

  • 我希望这对您每次训练模型时都能提供相同的准确性
【解决方案2】:

嗯,我不是机器学习方面的专家,但我知道它背后的数学原理。当你训练一个神经网络时,你基本上会找到损失函数的局部最小值。这意味着最终结果将在很大程度上取决于所有内部变量的初始猜测。

通常变量是随机的,作为初始估计,因此您可以通过多次运行训练过程获得完全不同的结果。

话虽如此,从我研究该主题开始,我就被告知,无论最初对参数的猜测如何,您通常都会达到相似的结果。但是很难说 0.88 和 0.92 是否会被认为是相似的。

希望这可以为您的问题提供一些可能的答案。

正如另一个答案中提到的,您可以通过引入种子,在参数的参数初始化和用于每个训练时期的数据的随机化中移除随机化。这将确保当你运行它两次时,一切都会以完全相同的顺序“随机化”。在 tensorflow 中,这是使用例如 tf.random.set_seed(1) 完成的,数字 1 可以更改为任何数字以获取新种子。

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2021-03-09
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多