pytorch-examples-mnist笔记01
调用的库
import argparse
import torch
import torch.nn as nn # 专门为神经网络设置的模块化接口
import torch.nn.functional as F # 对于激活函数和池化层
import torch.optim as optim # 用于优化参数
from torchvision import datasets, transforms # 定义了datasets的数据格式及常用的数据转换方式
用类实现网络的定义
class Net(nn.Module):
nn.Module是troch.nn中十分重要的类,定义自己的网络时通常要继承该类,类中包含了网络各层的定义及forward方法
super(Net, self).init()
执行父类的构造函数,使得能够调用父类的属性。(nn.Module的子类函数必须在构造函数中执行父类的构造函数)
nn.Conv2d
对由多个输入平面组成的输入信号进行二维卷积。(定义一个卷积层)
参数:
- in_channels:输入图像中的通道数
- out_channels:卷积产生的通道数
- kernel_size:卷积核的大小
- stride:卷积的步幅(默认1)
- padding:输入的两边都加0填充(默认0)
- padding_mode: ‘zeros’, ‘reflect’, ‘replicate’ or ‘circular’. Default: ‘zeros’
- dilation:核元素之间的间隔(默认1)
- groups:从输入通道到输出通道的阻塞连接数(默认1)
- bias:如果为真,则在输出中添加一个可学习的偏差。
nn.Dropout2d
随机使整个通道归零
参数:
- p:一个元素被零的概率
- inplace:如果设置为True,将就地执行此操作
nn.Linear
对传入数据应用线性转换(定义一个全连接层)
参数:
- in_features:每个输入样本的大小
- out_features:每个输出样本的大小
- bias
F.relu
在元素上应用直线单位函数(激活函数)
F.max_pool2d
在由多个输入平面组成的输入信号上应用一个二维最大池。(池化)
torch.flatten
展平张量中连续的暗淡范围。
F.log_softmax
应用softmax后接对数。(softmax分类)
它应用于沿dim的所有切片,并将对其进行重新缩放,以使元素位于[0,1]范围内且总和为1。
参数:
- input
- dim:将沿着其计算softmax的尺寸。
- dtype
训练函数
其中,model指建立好的网络模型;device指模型在哪个设备上运行,CPU还是GPU;train_loader是指数据集;
optimizer用于优化;epoch指整个数据集训练的次数
model.train()
model.train() 让model变成训练模式,此时dropout和batch normalization的操作在训练q起到防止网络过拟合的问题(将模型设置为训练状态,对应的有model.eval()只有前传)
enumerate()
同时列出数据和数据下标
zero_grad()
每次迭代把梯度的初值设为0(一种梯度下降法)
F.nll_loss
负对数似然损失(可选参数较多)
backward()
反向传播,用来计算梯度(只有标量才能直接使用)
step()
更新参数,它使用的是当前参数空间对应的梯度,在backward()之后