首页 > 解决方案 > 有什么改进我的 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 左右。

在此处输入图像描述

我尝试了以下方法:

但我总是有相同的结果。

我不知道这是因为我拥有的图片很少,还是因为建筑不够大,无法从复杂的绘画中学习。

我想过尝试迁移学习(但我不知道这是否会有所帮助,因为这是我第一次尝试)。另外,你知道我在哪里可以找到训练有素的模型吗?

所以,我要求一些建议来改进我的模型。

标签: pythontensorflowtransfer-learningconv-neural-network

解决方案


可能是您对训练数据过度拟合,在这种情况下,您可以使用 dropout。另一件事是,如果您还没有标准化您的数据,您可以这样做。我不确定这是否会有很大帮助,但可以尝试一下:

X_training = X_training / X_training.max()

推荐阅读