python - 有什么改进我的 CNN 模型的建议(总是同样的低测试精度)?
问题描述
我正在做一个项目来检测绘画中是否存在一个人。我有 4000 张训练图像和 1000 张测试图像调整为 (256,256,3)
我尝试了一个具有 3 个(Conv 层、MaxPool、BatchNormalization)和 2 个全连接层的 CNN 模型。
model = Sequential()
model.add(Conv2D(32, kernel_size = (7, 7), activation='relu', input_shape=shape))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(64, kernel_size=(7,7), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(96, kernel_size=(5,5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation = 'sigmoid'))
训练精度始终收敛到 1(仅 20-50 个 epoch),测试精度始终保持在 0.67 左右。
我尝试了以下方法:
- 我尝试更改图层的大小并添加更多图层。
- 我尝试了数据增强
- 我尝试了较小的图像 128x128x3。
但我总是有相同的结果。
我不知道这是因为我拥有的图片很少,还是因为建筑不够大,无法从复杂的绘画中学习。
我想过尝试迁移学习(但我不知道这是否会有所帮助,因为这是我第一次尝试)。另外,你知道我在哪里可以找到训练有素的模型吗?
所以,我要求一些建议来改进我的模型。
解决方案
可能是您对训练数据过度拟合,在这种情况下,您可以使用 dropout。另一件事是,如果您还没有标准化您的数据,您可以这样做。我不确定这是否会有很大帮助,但可以尝试一下:
X_training = X_training / X_training.max()
推荐阅读
- mysql - 直接 SQL 而不是光标和循环
- java - 我如何从 recylerview 获取单个值
- python - 删除重复的列值并根据熊猫中的条件选择保留行
- html - 如何使文本在 CSS 中的按钮悬停时显示动画?
- kubernetes - 如何从现有集群中导出 kubeconfig 文件?
- visual-studio-code - VSCode - 如何仅在 javascript 文件中更改常量的颜色?
- css - Bulma CSS 类不适用于 Obelisk 项目中的元素
- ruby-on-rails - 我们如何在 rails 模型属性的渲染视图中获得翻译,例如博客文章?
- php - 此集合实例上不存在属性 [myTruck],在模型中将“myTruck”作为方法
- scikit-learn - 最新的 XGboost 和 Sklearn 给出错误