一:pytorch.nn常用知识整理
构建神经网络
1.激活函数
(1)softmax函数:
将多个神经元的输出,映射到(0,1)区间内;
很多时候,Sigmoid 作为最后一层的激活函数与交叉嫡代价函数组合;
如果需要将输出解释为概率分布,一般建议用softmax激活函数。
(2)ReLU激活函数:
计算量小
一定程度上缓解“梯度消失”问题
使部分神经元的输出为零,一定程度上可以缓解过拟合
更符合生物学的神经激活机制
(3)其他激活函数
2.代价函数
损失函数的函数。
(1)L1Loss函数:
两者差的绝对值的平均值
(2)MSELoss函数:
均方误差
(3)CrossEntropyLoss函数 / NLLLoss函数:
输入经过softmax函数后,再计算交叉熵。
交叉熵:
(4)其他代价函数
3.Layer
3.1卷积神经网络(CNN)
常用于图像处理。
(1)卷积层(Conv1d、Conv2d、Conv3d...)
Conv2d输入:
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
- in_channels(
int
) – 输入信号的通道 - out_channels(
int
) – 卷积产生的通道 - kerner_size(
int
ortuple
) - 卷积核的尺寸 - stride(
int
ortuple
,optional
) - 卷积步长 - padding(
int
ortuple
,optional
) - 输入的每一条边补充0的层数 - dilation(
int
ortuple
,optional
) – 卷积核元素之间的间距 - groups(
int
,optional
) – 从输入通道到输出通道的阻塞连接数 - bias(
bool
,optional
) - 如果bias=True
,添加偏置
(2)归一化层 / 标准化层(BatchNorm1d、BatchNorm1d、BatchNorm1d...)
class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)
- num_features: 来自期望输入的特征数,该期望输入的大小为'batch_size x num_features [x width]'
- eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
- momentum: 动态均值和动态方差所使用的动量。默认为0.1。
- affine: 一个布尔值,当设为true,给该层添加可学习的仿射变换参数。
(3)池化层(MaxPool1d、MaxPool2d、MaxPool3d...)
池化层可以降低数据尺寸。
class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
- kernel_size(
int
ortuple
) - max pooling的窗口大小 - stride(
int
ortuple
,optional
) - max pooling的窗口移动的步长。默认值是kernel_size
- padding(
int
ortuple
,optional
) - 输入的每一条边补充0的层数 - dilation(
int
ortuple
,optional
) – 一个控制窗口中元素步幅的参数 - return_indices - 如果等于
True
,会返回输出最大值的序号,对于上采样操作会有帮助 - ceil_mode - 如果等于
True
,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作
(4)线性层
class torch.nn.Linear(in_features, out_features, bias=True)
- in_features - 每个输入样本的大小
- out_features - 每个输出样本的大小
- bias - 若设置为False,这层不会学习偏置。默认值:True
(5)Dropout Layer
防止过拟合。随机将输入张量中整个通道设置为0。
class torch.nn.Dropout(p=0.5, inplace=False)
- p - 将元素置0的概率。默认值:0.5
- in-place - 若设置为True,会在原地执行操作。默认值:False
(6)典型卷积神经网络结构:
卷积(convolutional)层
归一化(normalization)层
ReLU层
池化(pooling)层
全连接层、softmax层等
3.2递归神经网络(RNN)、长短期记忆神经网络(LSTM)
常用于语言处理。
(1)循环层(RNN)
class torch.nn.RNN( args, * kwargs)
class torch.nn.LSTM( args, * kwargs)
4.容器
(1)nn.Module基类:
模型创建需要继承的类。
(2)forward(*input):
定义了每次执行的 计算步骤。 类中需要重写这个函数。
(3)Sequential(*args):
一个时序容器。模型会以他们传入的顺序被添加到容器中;
适用于较复杂的网络。
二:torch.optim常用知识整理
优化参数
1.optimizer构建
(1)Adam算法
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]
- params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
- lr (
float
, 可选) – 学习率(默认:1e-3) - betas (Tuple[
float
,float
], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999) - eps (
float
, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8) - weight_decay (
float
, 可选) – 权重衰减(L2惩罚)(默认: 0)
(2)其他算法
2.optimizer执行
step(closure):
进行单次优化 (参数更新)。
三:torch.nn.init
参数设置
四:完整神经网络构建步骤
1.获取数据集;(torchvision)
2.选择计算硬件(GPU 或 CPU);
3.选择损失函数和优化器;
4.创建模型及模型实例;
5.设置训练停止的条件或训练次数;
6.训练神经网络(每一步应包含model、loss、backward、optim.step的计算);
7.测试评估训练结果。