文章目录
前言
本文介绍深度学习卷积神经网络(CNN)模型及其应用实战。本文主要介绍算法的应用–利用深度学习卷积神经网络构建猫狗识别模型。
一、构建数据集类
构建用于处理猫狗分类数据集的PyTorch数据集类。
1.导入模块
导入所需的Python模块和库,包括PyTorch的数据处理模块、操作系统路径处理模块、PIL库用于图像处理、以及PyTorch中的数据转换模块。
代码如下(示例):
import torch.utils.data
import os
import torch
import torch.utils.data as data
from PIL import Image
import torchvision.transforms as Trans
2.设置图片尺寸和转换
img_size 设置了图片的尺寸,tran 定义了图片转换的操作序列,包括调整大小、中心裁剪和转换为张量。
代码如下(示例):
img_size = 200
tran = Trans.Compose([
Trans.Resize(img_size),
Trans.CenterCrop([img_size, img_size]),
Trans.ToTensor()
])
3.设数据集类 DogsVSCatsDataset:
init 方法:根据传入的 mode 和 dir 参数初始化数据集。如果是训练模式 (‘train’),则加载训练集数据;如果是测试模式 (‘test’),则加载测试集数据。每个模式下都会读取相应文件夹中的图像文件,并根据文件名判断是猫还是狗,将其存入 img_list 和 img_label 中。
getitem 方法:根据索引 item 返回数据集中的一个样本。在训练模式下,返回经过预定义转换 (tran) 处理后的图像及其对应的标签;在测试模式下,仅返回经过转换处理后的图像。
len 方法:返回整个数据集的大小,即样本数量。
代码如下(示例):
class DogsVSCatsDataset(data.Dataset):
def __init__(self, mode, dir):
# 初始化函数,定义了数据集的大小、图像列表、标签列表、转换方式和模式
def __getitem__(self, item):
# 获取数据函数,根据模式返回图像及其标签(训练模式)或仅返回图像(测试模式)
def __len__(self):
# 返回数据集大小
])
4.数据处理细节:
训练模式中,图像文件命名规则为 cat.* 或 dog.*,通过文件名切分来确定标签,cat 对应标签 1,dog 对应标签 0。
测试模式中,没有有意义的标签,因此用 2 来占位。
5.异常处理:
如果传入的 mode 不是 ‘train’ 或 ‘test’,则会打印 “没有这个mode” 提示信息。
全部代码如下:
import torch.utils.data
import os #文件操作模块
import torch
import torch.utils.data as data #用于继承一个父类(data.Dataset)里的函数
from PIL import Image
import torchvision.transforms as Trans #在定义图片转换的格式时,会用到相关的函数
img_size = 200 #设置图片尺寸
tran = Trans.Compose([Trans.Resize(img_size), Trans.CenterCrop([img_size, img_size]), Trans.ToTensor()]) #封装, 对后面读取的图片的格式转换
class DogsVSCatsDataset(data.Dataset):
def __init__(self, mode, dir):
self.data_size = 0 #数据集的大小
self.img_list=[] #用于存图
self.img_label =[]#标签
self.trans=tran #转换的属性设置
self.mode =mode #下面打开集的模式
if self.mode =='train':
dir += '/train/' #更新地址
for file in os.listdir(dir): #遍历
self.img_list.append(dir+file) #存图
self.data_size += 1
name = file.split(sep=