【问题标题】:Increasing the smoothness of the accuracy curve in image classification提高图像分类精度曲线的平滑度
【发布时间】:2021-02-07 04:26:47
【问题描述】:

我使用 TILDA 图像数据集开发了一个卷积神经网络,使用以下模型可以提供超过 90% 的准确率。我对模型使用了 4 个批次和 100 个 epoch。

model = keras.Sequential([
    layers.Input((30,30,1)),
    layers.Conv2D(8,2,padding='same', activation='relu',kernel_regularizer=regularizers.l2(0.01)),
    layers.BatchNormalization(),
    layers.Conv2D(16,2,padding='same', activation='relu',kernel_regularizer=regularizers.l2(0.01)),
    layers.BatchNormalization(),
    layers.Conv2D(32,2,padding='same', activation='sigmoid',kernel_regularizer=regularizers.l2(0.01)),
    layers.BatchNormalization(),
    layers.MaxPooling2D(),
    layers.Flatten(),
    layers.Dropout(0.5),
    layers.Dense(5, activation = "softmax"),
])

使用上述模型,我可以为训练和验证准确度绘制以下图表。

您对增加这些曲线的平滑度有什么建议吗?获得这种曲线的可能原因是什么?感谢您提出改进此模型的建议。

【问题讨论】:

    标签: conv-neural-network tensorflow2.0 cross-validation image-recognition tf.keras


    【解决方案1】:

    以下可能有助于获得更平滑的曲线:

    1. 切勿在最后一层之前使用 dropout。模型中的MaxPool + Dropout 丢弃了流入最后一层的数据的 87.5%。也避免池化,除非您需要全局或自适应池化来获得固定形状的输出。如果必须进行池化,则需要更多数量的内核来补偿信息损失。

    2. 使用较低的学习率。从训练曲线可以看出,模型被导向一个最小值,但有几个颠簸。

    3. 您是否在使用没有动量的 SGD?如果是,请介绍,动量。还可以考虑具有内置动力的自适应优化器,例如 Adam。

    4. 为什么sigmoid 介于两者之间? Sigmoid 降低梯度幅度,使学习变慢。

    5. 如果您只关心曲线并且不受参数数量的限制,请考虑添加更多层和/或通道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2017-10-15
      • 1970-01-01
      • 2015-04-16
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多