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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'))

   模型概览如下:

### Kaggle 图像分类 数据集与教程推荐 对于图像分类领域,Kaggle 提供了许多高质量的数据集和教程,能够帮助用户深入了解深度学习技术的应用。以下是几个值得推荐的内容: #### 1. **Dogs vs Cats Redux: Kernels Edition** 这是一个经典的二分类问题竞赛数据集[^2],旨在区分图片中的动物是猫还是狗。此数据集包含训练集中25,000张标注好的猫狗图片以及测试集中未标注的12,500张图片。它非常适合初学者入门图像分类任务。 - 数据量适中(约543MB),便于快速实验不同的算法模型。 - 官方文档清晰明了,并附带详细的使用指南[^1]。 #### 2. **CIFAR-10 Dataset** 除了上述提到的猫狗大战外,另一个常用的小型彩色图像数据库——CIFAR-10也备受青睐。尽管它的分辨率较低(仅32×32像素),但它涵盖了十个不同类别的对象,增加了挑战性和多样性[^4]。 #### 3. **ImageNet Subsets** 虽然完整的 ImageNet 数据库非常庞大难以处理,但是某些子集合已经被提取出来形成更易于管理的形式用于教学目的或其他轻量化项目开发需求之中;比如 Tiny ImageNet 就只有原版规模的一小部分却依然保留足够的复杂度来练习卷积神经网络(CNNs)[^3]. #### 工具支持 为了更好地利用这些资源,在实际操作过程中还可以借助 PyTorch 这样的框架来进行高效便捷的数据加载、增强变换等工作流程优化: ```python import torch from torchvision import datasets, transforms transform = transforms.Compose([ transforms.Resize((64, 64)), transforms.ToTensor() ]) train_dataset = datasets.ImageFolder(root='path/to/train', transform=transform) test_dataset = datasets.ImageFolder(root='path/to/test', transform=transform) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=32, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=32, shuffle=False) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值