如何改进模型以防止过度拟合,从而实现非常简单的图像分类

彼得·德格拉乌威

首先:我是TensorFlow(version2)的初学者。通过阅读,我学到很多东西。但是,我似乎找不到以下问题的答案。

我正在尝试建立一个模型,将图像分为三个标签。正如您在下面的图表中看到的那样,我的培训专家还不错,但是验证准确性太低了。

培训和验证准确性

据我了解,这可能是一个“过拟合”问题。

也许我先解释一下我要做什么:

我想使用图像作为输入。作为输出,我想接收零个或多个属于这些图像的标签(分类器)。我期望这将是一件容易的事,因为输入图像很简单。(只有两种颜色,并且只有0、1、2或3个可能的“标签”。这是图像的一些示例。它们表示字段(由蓝色多边形界定)上行走的轨道(绿色)的表示形式:

示例输入图像

可能的标签是:

  1. 十字架:(前两张图片):您可以清楚地看到绿线正在形成一个或多个“十字架”
  2. 之字形:(第三张图片):不能完全确定这是否是英语中的正确术语,但我想您已经明白了;-)
  3. 行:绿线大多是平行线(无锯齿形或交叉形)
  4. 以上都不是(不知道这是否需要作为标签)

我正在使用以下模型:

batch_size = 128
epochs = 30
IMG_HEIGHT = 150
IMG_WIDTH = 150

model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', 
           input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
    MaxPooling2D(),
    Dropout(0.2),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Dropout(0.2),
    Flatten(),
    Dense(512, activation='relu'),
    Dense(1, activation='sigmoid')
])



model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])


model.summary()

Model: "sequential_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_15 (Conv2D)           (None, 150, 150, 16)      448       
_________________________________________________________________
max_pooling2d_15 (MaxPooling (None, 75, 75, 16)        0         
_________________________________________________________________
dropout_10 (Dropout)         (None, 75, 75, 16)        0         
_________________________________________________________________
conv2d_16 (Conv2D)           (None, 75, 75, 32)        4640      
_________________________________________________________________
max_pooling2d_16 (MaxPooling (None, 37, 37, 32)        0         
_________________________________________________________________
conv2d_17 (Conv2D)           (None, 37, 37, 64)        18496     
_________________________________________________________________
max_pooling2d_17 (MaxPooling (None, 18, 18, 64)        0         
_________________________________________________________________
dropout_11 (Dropout)         (None, 18, 18, 64)        0         
_________________________________________________________________
flatten_5 (Flatten)          (None, 20736)             0         
_________________________________________________________________
dense_10 (Dense)             (None, 512)               10617344  
_________________________________________________________________
dense_11 (Dense)             (None, 3)                 1539      
=================================================================
Total params: 10,642,467
Trainable params: 10,642,467
Non-trainable params: 0

我将3360张图像用作训练数据集,将496张用作验证数据集。这些已经“增强”,因此这些集合包含其他现有图像的已经旋转和镜像的版本。

也许值得一提的是数据集是不平衡的:80%的图像的确包含标签“ cross”,而其他20%的图像被“ zig-zag”和“ rows”覆盖。

任何人都可以朝着正确的方向指导我如何改善我的模型?

马可·罗梅利

您希望网络输出3个可能的标签,因此模型的最后一层应该能够做到这一点。实际上,您可以将其更改为Dense(3, activation='sigmoid')

我不知道为什么在培训期间它不会给您带来任何错误,但是您还应该检查将输入和标签馈送到网络的方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何测试分类器的过度拟合?

来自分类Dev

防止过度拟合的机器学习是作弊吗?

来自分类Dev

Python ConvNet图像分类器-拟合二进制图像分类模型时出现“ ValueError”

来自分类Dev

ACPI损坏的电池是否可以防止过度充电?

来自分类Dev

如何避免遗传算法过度拟合

来自分类Dev

如何使用Keras过度拟合数据?

来自分类Dev

模型拟合后Keras如何评估单个图像

来自分类Dev

用分类变量拟合nls模型

来自分类Dev

这个分类模型是不是过拟合了?

来自分类Dev

如何保存图像的当前位置以防止随后的动画将图像移回中心-swift

来自分类Dev

如何使用SIFT和SVM实现常规图像分类器

来自分类Dev

如何不基于图像分类快速运行tflite模型

来自分类Dev

如何防止ADL期间的过度阴影?

来自分类Dev

如何设置Ecto变更集,以防止丢失缺少必填字段的模型?

来自分类Dev

如何设置Ecto变更集,以防止丢失缺少必填字段的模型?

来自分类Dev

如何创建 Proc 以防止 Rails 模型中的 DRY?Rails 5.2.1,rails_admin

来自分类Dev

过度拟合如何导致对象检测中出现误报?

来自分类Dev

如何避免在给定的 Convnet 中过度拟合

来自分类Dev

LIBSVM过度拟合

来自分类Dev

随机森林过度拟合

来自分类Dev

LSTM实施/过度拟合

来自分类Dev

LIBSVM过度拟合

来自分类Dev

如何在python中做一个简单的“模型拟合”?

来自分类Dev

如何在简单的恢复模型中实现灾难恢复(DR)

来自分类Dev

尽管非常成功的交叉验证结果与随机森林过度拟合

来自分类Dev

如何并行拟合Spark的分类器?

来自分类Dev

如何并行拟合Spark的分类器?

来自分类Dev

次优早期停止可防止机器学习中的过度拟合?

来自分类Dev

在.NET中,有什么方法可以测试异步锁定,从而证明可以防止重入?

Related 相关文章

  1. 1

    如何测试分类器的过度拟合?

  2. 2

    防止过度拟合的机器学习是作弊吗?

  3. 3

    Python ConvNet图像分类器-拟合二进制图像分类模型时出现“ ValueError”

  4. 4

    ACPI损坏的电池是否可以防止过度充电?

  5. 5

    如何避免遗传算法过度拟合

  6. 6

    如何使用Keras过度拟合数据?

  7. 7

    模型拟合后Keras如何评估单个图像

  8. 8

    用分类变量拟合nls模型

  9. 9

    这个分类模型是不是过拟合了?

  10. 10

    如何保存图像的当前位置以防止随后的动画将图像移回中心-swift

  11. 11

    如何使用SIFT和SVM实现常规图像分类器

  12. 12

    如何不基于图像分类快速运行tflite模型

  13. 13

    如何防止ADL期间的过度阴影?

  14. 14

    如何设置Ecto变更集,以防止丢失缺少必填字段的模型?

  15. 15

    如何设置Ecto变更集,以防止丢失缺少必填字段的模型?

  16. 16

    如何创建 Proc 以防止 Rails 模型中的 DRY?Rails 5.2.1,rails_admin

  17. 17

    过度拟合如何导致对象检测中出现误报?

  18. 18

    如何避免在给定的 Convnet 中过度拟合

  19. 19

    LIBSVM过度拟合

  20. 20

    随机森林过度拟合

  21. 21

    LSTM实施/过度拟合

  22. 22

    LIBSVM过度拟合

  23. 23

    如何在python中做一个简单的“模型拟合”?

  24. 24

    如何在简单的恢复模型中实现灾难恢复(DR)

  25. 25

    尽管非常成功的交叉验证结果与随机森林过度拟合

  26. 26

    如何并行拟合Spark的分类器?

  27. 27

    如何并行拟合Spark的分类器?

  28. 28

    次优早期停止可防止机器学习中的过度拟合?

  29. 29

    在.NET中,有什么方法可以测试异步锁定,从而证明可以防止重入?

热门标签

归档