D2 Pytorch主要模块&FashionMNIST时装分类实践

目录

  • Pytorch主要模块
    • 1. 引入
    • 2. 基本配置
    • 3. 读取数据
      • 3.1 ImageFolder类
      • 3.2 自定义Dataset类
      • 3.3 DataLoader按批次读入数据
    • 4. 搭建模型
    • 5. 模型初始化
      • 5.1 初始化方法
      • 5.2 初始化函数的封装
    • 6. 损失函数
    • 7. 优化器
    • 8. 训练和评估
  • 实践_FashionMNIST时装分类

Pytorch主要模块

1. 引入

D2 Pytorch主要模块&FashionMNIST时装分类实践_第1张图片

2. 基本配置

  • 导入常见包
  • 设置超参数:batch_size, lr, epochs…
  • GPU设置
# 方案一:使用os.environ,这种情况如果使用GPU不需要设置
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1'# 方案二:使用“device”,后续对要使用GPU的变量用.to(device)即可
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")

3. 读取数据

  • Dataset: 定义好数据的格式和数据变换形式
  • DataLoader: 用iterative的方式不断读入批次数据

3.1 ImageFolder类

import torch
from torchvision import datasets
train_data = datasets.ImageFolder(train_path, transform=data_transform)
val_data = datasets.ImageFolder(val_path, transform=data_transform)

3.2 自定义Dataset类

自定义Dataset类来实现灵活的数据读取,需继承PyTorch自身的Dataset类。主要包含三个函数:

  • __init__: 向类中传入外部参数,同时定义样本集
  • __getitem__: 逐个读取样本集合中的元素,可进行一定的变换,并将返回训练/验证所需的数据
  • __len__: 返回数据集的样本数

自定义Dataset类链接地址_深入浅出Pytorch

3.3 DataLoader按批次读入数据

from torch.utils.data import DataLoader

train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, num_workers=4, shuffle=True, drop_last=True)
val_loader = torch.utils.data.DataLoader(val_data, batch_size=batch_size, num_workers=4, shuffle=False)

4. 搭建模型

  1. 继承 torch.nn 模块中的Module类
  2. 重载了 Module 类的 init 函数和 forward 函数(自动生成backward函数)
  3. 实例化自定义类得到模型变量net
  4. net(X) 通过 Module 类的 call 函数调⽤自定义类的forward 函数来完成前向计算

神经网络中常见的层:

  • 不含模型参数的层
  • 含模型参数的层
  • 二维卷积层
  • 池化层

搭建模型示例_深入浅出Pytorch

5. 模型初始化

在深度学习模型的训练中,权重的初始值极为重要。一个好的权重值,会使模型收敛速度提高,使模型准确率更精确。为了利于训练和减少收敛时间,我们需要对模型进行合理的初始化。

5.1 初始化方法

通过访问torch.nn.init的官方文档链接 ,发现torch.nn.init提供的初始化方法

5.2 初始化函数的封装

def initialize_weights(self):
	for m in self.modules():
		# 判断是否属于Conv2d
		if isinstance(m, nn.Conv2d):
			torch.nn.init.xavier_normal_(m.weight.data)
			# 判断是否有偏置
			if m.bias is not None:
				torch.nn.init.constant_(m.bias.data,0.3)
		elif isinstance(m, nn.Linear):
			torch.nn.init.normal_(m.weight.data, 0.1)
			if m.bias is not None:
				torch.nn.init.zeros_(m.bias.data)
		elif isinstance(m, nn.BatchNorm2d):
			m.weight.data.fill_(1) 		 
			m.bias.data.zeros_()	

模型初始化_深入浅出Pytorch

6. 损失函数

相当于模型的负反馈。常见的损失函数介绍

7. 优化器

Pytorch优化器库torch.optim提供的十种优化器

8. 训练和评估

D2 Pytorch主要模块&FashionMNIST时装分类实践_第2张图片
训练评估代码_深入浅出Pytorch

实践_FashionMNIST时装分类

  1. 激活远程服务器虚拟环境,配置环境,打开jupyter notebook并映射到本地,打开本地浏览器
  2. 手动下载FashionMNIST数据集,并在同级目录新建ipynb文件
  3. 导入必要的包,设置训练环境和超参数
  4. 分析数据,自定义dataset类读取并处理数据, DataLoader加载数据
  5. 搭建模型,类继承nn.Module, 定义模型变量,并重写forward函数
  6. 选择设置 Loss_fn 和 Optimizer
  7. 训练并验证模型
  8. 保存模型参数

FashionMNIST时装分类.ipynb


@夏日回音

你可能感兴趣的:(深入浅出Pytorch,pytorch,分类,深度学习)