【问题标题】:Fluctuating Learning Curve波动的学习曲线
【发布时间】:2019-07-24 18:35:38
【问题描述】:

我正在训练一个 CNN 模型,这是代码。

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(300, 300,3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(input_shape=(300, 300)),
    tf.keras.layers.Dense(512, activation=tf.nn.relu),
    tf.keras.layers.Dense(256, activation=tf.nn.relu),
    tf.keras.layers.Dense(64, activation=tf.nn.relu),
    tf.keras.layers.Dense(1, activation='linear')
])

我使用 Adam 的学习率为 0.00003,训练了 100 个 epoch。

但是,验证的 10 个 epoch 开始在 0.16 和 0.22 之间波动。 (我不能使用提前停止,因为每次我重试训练时,都会在随机数的时期后达到最小值)。

这个学习曲线正常吗?我能做些什么来改进它?

【问题讨论】:

  • 根据我的经验,这是绝对正常的,不用担心。你可以尝试将你的训练推得更久一些(大约500 epochs)并降低你的学习率(除以3,然后是10),看看你是否能得到更好的结果。
  • 您也可以尝试添加 BatchNorms。我不知道您要解决什么问题,但是使用 Conv2D,通常是个好主意
  • 谢谢你的回答我会试试这个。
  • 我尝试了 300 个 epoch 验证并没有改变我可以看到我过度拟合,因为只有测试减少到 0。我尝试了 Dropout 和 BatchNormalization 但错误增加了它变成了 0.18- 0.28
  • 好吧,那我猜你还是试着降低你的学习率,但是再一次,有这种振荡是完全正常的(但它们可能是学习率太高的症状)

标签: python tensorflow conv-neural-network


【解决方案1】:

是的,这很正常,不必担心,但对于未来,我建议对图表进行平滑处理,这将帮助您更好地了解正在发生的事情。例如,看看我从 tensorboard 捕获的这张图

透明图是带有初始值的图,较暗的图是平滑图。平滑图显示模型正在最小化损失,非常随意且缓慢,但它仍在最小化。

有时查看平滑图可以帮助更好地识别模型的训练。

【讨论】:

  • 这真的很有帮助,但在我的情况下,即使在 300 个 epoch 之后,验证错误也是不变的。你能告诉我该怎么做才能减少它吗?
  • 获取更多数据、扩充数据或尝试其他架构,这将有很大帮助
  • 同意,很明显,您的模型对数据过度拟合,因此训练损失正在减少,但验证损失却趋于平缓。一般来说,如果你的模型对少量数据过度拟合,那么这意味着它有能力泛化这个问题,问题绝对是数据量,我可以看到你正在使用 300x300 的图像来训练二元分类器,如何有很多图像作为一个整体?数据有偏差吗?意思是你有两个班级的平均分配吗?这些答案将帮助我们更好地理解问题
  • 数据集确实很小,抱歉我没有激活函数,我只看到最后一层有一个节点,并假设它是一个二元分类器。对于回归,尤其是大量数据是必要的,就损失而言,您的验证数据看起来也很合适。我认为与其担心损失不会减少,不如在验证数据上检查 MSE。
  • 另外,一个建议,如果您的值介于 2.5 和 3.5 之间,最好从这些值中减去 2.5,以便您的网络预测在 0-1 之间,您可以在采样时始终添加 2.5并得到相同的答案。在学习方面,我认为网络会更容易一些。可能根本不影响它。但最好是安全的
猜你喜欢
  • 2019-05-04
  • 2011-01-21
  • 1970-01-01
  • 2021-10-02
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2011-06-04
相关资源
最近更新 更多