如何提高模型的准确性? (猫与狗的图像识别)

问题描述 投票:0回答:2

我的模型已经达到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个纪元(约7个小时的培训)。我正在使用学习率= 0.001(增加lr导致过度拟合)的Adam优化器。我应该缩小测试范围吗?我有太多辍学吗?我的参数还好吗?

python keras model classification image-recognition
2个回答
1
投票

您的参数很好,但是您正在馈送NN 200x200图像,这可能会导致某些拟合不足(即:NN一次馈入了太多数据,并且由于该原因而表现不佳)。

要解决此问题,请尝试使图像的尺寸更像50x50,这样可以大大加快训练速度。您可以使用glob和PIL库通过简单的python脚本执行此操作,默认情况下应安装这些库。如果未安装PIL,请运行pip install Pillow,这应该将其安装。

您也可以尝试使用numpy将它们转换为黑白。


1
投票

如果您浏览数据科学页面,有一些很好的神经网络体系结构示例,可用于改进模型。例如,您可以将ResNet用作具有残差训练的结构,也可以将Inception用作具有不同Conv2D内核大小的网络合并在一起。这允许使用不同的内核提取“不同大小”的特征并将信息合并在一起。另外,我建议您将激活方式从“ relu”更改为“ selu”,以避免神经元死亡并增加一些非线性。并看看SeparableConv2D层。如果使用正确的方法,它们可以帮助加快培训速度,并可以提高性能。

还建议将辍学层留在模型的“末端”,因此,您应让第一层学习特征,并使用最后一层来进行泛化并避免过度拟合。

© www.soinside.com 2019 - 2024. All rights reserved.