基于小型训练集的卷积神经网络(kaggle - 猫狗分类)(《python深度学习》)

该博客介绍了如何在Kaggle猫狗分类数据集上构建卷积神经网络。作者详细阐述了数据预处理、网络构建(包括模型结构和编译)、模型拟合及绘图过程。通过4000张图片的训练,模型在验证集上的准确率约为75%,但存在过拟合问题。

1 数据集简介与预处理

   kaggle猫狗分类数据集是kaggle在2013年末用作一项视觉竞赛的一部分。整个数据集包含12500张狗和12500张猫共计25000张图片,数据集大小为543MB(压缩后)。在本例中采用其中4000张图片,其中,每个类别选用1000个样本的训练集、每个类别各500个样本的验证集以及每个类别各500个样本的测试集。在模型设计搭建前应将以上的分类分门别类的放到文件夹中,可以手动复制,也可以使用python os与shutil 编程实现。分类好应如下图所示:

2构建网络

2.1模型构建

      本例采用Conv2D(采用relu激活)和MaxPooling2D交替的卷积神经网络,考虑到图像的大小与复杂度等因素,相比于应用于MNIST数据集的简单卷积神经网络,应当适当的增加网络的容量。因此在本例中使用4组Conv2D和MaxPooling的组合,初始输入设定为150*150,在最后Flatten层之前得到的是一组7*7的特征图。后面全连接层包括一个节点数为512,激活函数为relu的隐藏层,以及激活函数为sigmoid的输出层,同时考虑到过拟合的问题,在输入层添加比例为50%的dropout。实现代码如下:

model = 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(64,(3,3),activation = 'relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512,activation = 'relu'))
model.add(layers.Dense(1,activation = 'sigmoid'))

   模型概览如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值