本文主要是介绍CNN之猫狗图像分类--加入Dropout和数据增强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在上一篇https://blog.csdn.net/weixin_40356612/article/details/107636725
文章中是从头开始训练一个猫狗分类模型,出现了过拟合,本节添加Dropout
和数据增强
技术来防止过拟合。
一、在模型中添加Dropout
from keras import layers
from keras import models
from keras import optimizersmodel = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))model.add(layers.Flatten())
model.add(layers.Dropout(0.5)) # Dropout层 降低过拟合
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
二、使用数据增强
from keras.preprocessing.image import ImageDataGenerator# 增强训练数据集
train_datagen = ImageDataGenerator( rescale=1./255,rotation_range=40, width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True
)
# 验证集不能增强
test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory("./dogs_and_cats_small/train",target_size=(150,150),batch_size=32,class_mode='binary'
)
validation_generator = test_datagen.flow_from_directory("./dogs_and_cats_small/validation",target_size=(150, 150),batch_size=32,class_mode='binary'
)
三、训练模型和结果
在原来模型的配置上,将训练次数上升到100个epochs,训练模型。
训练和验证的精度曲线
训练和验证的损失曲线
四、结论
使用dropout和数据增强后,模型不再拟合,训练曲线紧跟验证曲线,现在的精度为82%,比未正则化前提高了15%。
可以在此基础上再使用正则化和调节网络参数,精度可达86%
但依靠从头开始训练卷积神经网络,再想提高精度就比较困难,因为可使用的数据太少
要想进一步提高进度,需要使用:预训练的模型
。
五、参考文献
佛朗索瓦.肖莱著,张亮译. Python深度学习[M]. 人民邮电出版社.2018.8.p111-115.
END
这篇关于CNN之猫狗图像分类--加入Dropout和数据增强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!