有什么改进我的 CNN 模型的建议(总是同样低的测试精度)?

Any suggestions to improve my CNN model (always the same low test accuracy)?

我正在做一个项目来检测一幅画中是否存在一个人。我有 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 轮),测试精度始终保持在 0.67 左右。

我尝试了以下方法:

但我总是得到相同的结果。

不知道是我图少的缘故,还是建筑不够大,学不来复杂的画。

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

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

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

X_training = X_training / X_training.max()

我尝试使用具有 4 个完全连接层的 VGG16(冻结),验证精度上升到 0.83。另外,我正在使用 ImageDataGenerator。