文章目录
深度学习Week5——运动鞋识别
一、前言
二、我的环境
三、前期工作
1、配置环境
2、导入数据
3、划分数据集
四、构建CNN网络
五、训练模型
1、设置超参数
2、编写训练函数
3、编写测试函数
六、结果可视化
1、Loss图和Accuracy图
2、指定图片识别
3、加载并保存模型
七、拔高训练
一、前言
- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊 | 接辅导、项目定制
大家新年快乐呀🐉🎉
过年期间休息(摆大烂)了一段时间,好多内容忘记了😭,因此作为新年第一篇,我们就以复习巩固为主。
新的一年,我更换了设备,如今也是支持GPU啦
二、我的环境
- 电脑系统:Windows 10
- 语言环境:Python 3.11.3
- 编译器:Pycharm2023.2.3
深度学习环境:Pytorch
显卡及显存:RTX 3060 8G
三、前期工作
1、导入库并配置环境
import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision
from torchvision import transforms, datasets
import os,PIL,pathlib,random
import numpy as np
device = torch.device("cuda")
device
输出:
device(type='cuda')
至此,我们的环境已经配置完成。
2、 导入数据
我们下载好文件到自己的文件夹目录中,复制文件地址备用,注意这里要将[str(path).split("\\")[4] for path in data_paths]中[]里的数字改为自己路径所对应的数字,例如我的是“2”
这里引用K同学对于下列函数的解释。
第一步:使用pathlib.Path()函数将字符串类型的文件夹路径转换为pathlib.Path对象。
第二步:使用glob()方法获取data_dir路径下的所有文件路径,并以列表形式存储在data_paths中。
第三步:通过split()函数对data_paths中的每个文件路径执行分割操作,获得各个文件所属的类别名称,并存储在classeNames中
第四步:打印classeNames列表,显示每个文件所属的类别名称。
data_dir = 'Data/Week5'
data_dir = pathlib.Path(data_dir)
data_paths = list(data_dir.glob('*'))
classeNames = [str(path).split("\\")[2] for path in data_paths]
classeNames
输出:
['test', 'train']
其实通过前5周的学习,前面导入数据,构建模型的过程已经十分熟练了,因此不再过多废话啦
data_dir = 'Data/Week5/train'
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*.jpg')))
print("训练图片总数为:",image_count)
输出:
训练图片总数为: 502
然后我们可以指定最后一张鞋的照片作为测试是否导入数据成功。
roses = list(data_dir.glob('Adidas/*.jpg'))
PIL.Image.open(str(roses[-1]))

# 关于transforms.Compose的更多介绍可以参考:https://blog.youkuaiyun.com/qq_38251616/article/details/124878863
train_transforms = transforms.Compose([
transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸
# transforms.RandomHorizontalFlip(), # 随机水平翻转
transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor,并归一化到[0,1]之间
transforms.Normalize( # 标准化处理-->转换为标准正太分布(高斯分布),使模型更容易收敛
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]) # 其中 mean=[0.485,0.456,0.406]与std=[0.229,0.224,0.225] 从数据集中随机抽样计算得到的。
])
test_transform = transforms.Compose([
transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸
transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor,并归一化到[0,1]之间
transforms.Normalize( # 标准化处理-->转换为标准正太分布(高斯分布),使模型更容易收敛
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]) # 其中 mean=[0.485,0.456,0.406]与std=[0.229,0.224,0.225] 从数据集中随机抽样计算得到的。
])
train_dataset = datasets.ImageFolder("Data/Week5/train/",transform = train_transforms)
test_dataset = datasets.ImageFolder("Data/Week5/test/",transform = train_transforms)
train_dataset.class_to_idx
输出:
{'adidas': 0, 'nike': 1}
3、划分训练集
batch_size = 32
train_dl = torch.utils.data.DataLoader(train_dataset,
batch_size = batch_size,
shuffle

最低0.47元/天 解锁文章
1350





