头文件:
import torch as t import torchvision as tv import torchvision.transforms as transforms from torch.autograd import Variable
import torch.nn as nn import torch.nn.functional as F
1.数据加载及预处理
1)主要函数:
tv.datasets: 数据路径,是训练集还是测试集,是否需要下载,预处理
t.utils.data.Dataloader:导入数据,制定batch_size
tv.transform.Compose:数据预处理的操作集,如将数据转为Tensor格式,归一化等
主要需要加载训练集和测试集
2)一些技巧:
数据加载:如果是常见开源库,可以用torchvision载入;
加载完以后可视化看一下
2.定义网络(Net)
用一个名为Net的类定义
需要继承torch.nn中的nn.Module(注意M大写)
Net类包括初始化函数和forward函数两部分
1)初始化:_init__(self): 放置有可学习参数的层(注意init前后均是两个下划线)
a)对nn.Module初始化: super(Net, self)__init__()
b)定义卷积和全连接操作(用到nn.Conv2d(), nn.Linear())
2)前向操作:forward(self, x)
输入x,按照网络前向传播步骤,调用初始化中定义的卷积和全连接操作,得到最后输出,并return
3.定义损失函数和优化器
损失函数评估结果与label间的差距,通过backward损失函数,可以计算出每个参数的梯度,然后通过优化器调整参数
损失函数nn中已定义好
import torch.optim as optim
优化器在optim中定义好,调用即可
4.训练网络(目的是得出最佳参数的网络)
Epoch
i,data
1)获取训练数据和标签
2)数据输入网络,前向传播
3)网络输出和标签输入损失函数,求得损失
4)清零优化器
5)损失反向传播
6)更新优化器,更新参数
7)累加损失,信息打印,用于监测每个batch的平均损失,主要看损失有没有变小
训练好网络类后创建一个网络,即net=Net()
5.测试网络
看实际标签和预测结果
把测试数据输入网络,将其输出和label比较,看二者一致样本占全部样本比重,即为测试结果
6.在GPU训练
将网络、数据、标签都转为CUDA
7.其他:4.26前的pytorch版本,网络输入为Variable,数据在输入net前需要从Tensor转为Variable,需要from torch.autograd import Variable
4.26 PYtorch中Variable和tensor区别不大,无需再转换