【问题标题】:Can this be considered overfitting?这可以被认为是过拟合吗?
【发布时间】:2020-10-02 15:19:59
【问题描述】:

我有 4 个班级,每个班级有 1350 张图片。验证集占总图像的 20%(它是自动生成的)。训练模型使用MobilenetV2网络:

base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE, include_top=False, weights='imagenet') 

模型已创建:

model = tf.keras.Sequential([
  base_model,
  tf.keras.layers.Conv2D(32, 3, activation='relu', kernel_regularizer=regularizers.l2(0.001)),
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.MaxPool2D(),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(4, activation='softmax', kernel_regularizer=regularizers.l2(0.001))
]) 

模型经过 20 个 epoch 的训练,然后在 15 个 epoch 中完成微调。结果如下:

Image of the model trained before fine tunning

Image of the model trained after 15 epochs and fine tunning

【问题讨论】:

    标签: tensorflow tf.keras transfer-learning


    【解决方案1】:

    如果没有验证损失的数值,有点难以判断,但我会说微调之前的结果略微过度拟合,而微调之后的结果则不太适合。您还可以做一些额外的事情。一种是尝试使用回调 tf.keras.callbacks.ReduceLROnPlateau 使用可调整的学习率。设置它以监控验证丢失。文档是here. 我设置因子=.5 和耐心=1。其次用 tf.keras.layers.GlobalMaxPool2D 替换 Flatten 层,看看是否能改善验证损失。

    【讨论】:

    • 添加 tf.keras.layers.GlobalMaxPool2D 后,值如下:Epoch 20/20 68/68 [==============================] - 26s 377ms/step - loss: 0.1982 - accuracy: 0.9833 - val_loss: 0.7288 - val_accuracy: 0.7926
    • 尝试在最后的密集层之前添加 keras.layers.BatchNormalization(axis=-1, motion=0.99, epsilon=0.001) 看看是否有帮助。
    • 我有这个:Epoch 20/20 68/68 [==============================] - 26s 377ms/step - loss: 0.1422 - accuracy: 0.9817 - val_loss: 1.0297 - val_accuracy: 0.7685
    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多