[英]CNN does not perform well on simple image recognition problem of cats and dogs
[英]How to increase my models' accuracy? (Cats vs Dogs image recognition)
我的 model 的准确率已达到 71%,但它几乎总是将图片标记为“狗”(约 67% 的图片是狗)。 我的训练数据集包含 3680 张图片,测试数据集包含 3670 张图片。
model = Sequential()
model.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu', padding="same", input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu', padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=256, kernel_size=(3, 3),activation='relu', padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Dropout(0.3))
model.add(Conv2D(filters=512, kernel_size=(3, 3),activation='relu', padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Dropout(0.35))
model.add(Conv2D(filters=512, kernel_size=(3, 3),activation='relu', padding="same"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
我正在将图片大小调整为 200x200 正方形,并在训练前对数据进行洗牌。 我已将其设置为 64 个批量大小和 60 个 epoch(约 7 小时的训练)。 我正在使用学习率 = 0.001 的 Adam 优化器(增加 lr 会导致过度拟合)。 我应该缩小我的测试集吗? 我有太多的辍学? 我的参数没问题吗?
如果您查看数据科学页面,这里有一些很好的神经网络架构示例,您可以使用它们来改进您的 model。 例如,您可以使用带有残差训练的类似 ResNet 的结构,或者您可以使用类似 Inception 的网络,将不同的 Conv2D kernel 大小合并在一起。 这允许使用不同的内核提取“不同大小”的特征并将信息合并在一起。 另外我建议您将激活从“relu”更改为“selu”,以避免神经元死亡并添加一些非线性。 还可以看看 SeparableConv2D 层。 它们有助于加快训练速度,如果以正确的方式使用,可以提高性能。
还建议将 dropout 层留在 model 的“末尾”,以便让第一层学习特征并使用最后一层来解释泛化并避免过度拟合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.