深度学习CNN算法及算法应用--猫狗识别(二)


前言

本文介绍深度学习卷积神经网络(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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值