Pytorch-速查表-常用层和模块以及使用方法
Pytorch常用层和模块速查表
本文章会持续更新,目前已包含
Flatten层的使用和图示
Linear层的使用和图示
ReLU层的使用和图示
Softmax层的使用和图示
之前的文章已经完成了FashionMNIST分类网络的搭建。现在我们来总结一下里面用到的layer,用一个3x28x28的minibatch来看看每一层以及模块的作用是什么。
我们先rand出一个3x28x28的随机数据:
input_image = torch.rand(3,28,28)
print(input_image.size())
其代表着3张28x28灰度图的照片,作为一个minibatch。
现在我会将它传入各种不同的层,看看每个层的作用会是什么。
nn.Flatten
nn.Flatten, 中文名叫展平层,他会对一个batch中每一张图片从一个2D的28x28的图片展平为一个1D的,长度为784的tensor。(默认dim=0的维度为batch维度,且保持不变)
flatten = nn.Flatten() # 实例化一个展平层
flat_images = flatten(input_image_
print(flat_image.size())
nn.Linear
nn.Linear,中文名叫线性层,也叫全连接层,本质上就是一个矩阵相乘加上偏置,其作用是将上一层的信息整合,在这里你可以理解成对着图片写短综述或者说简报,以供后续层的继续整合和决策。
使用需要指定单个样本输入的in_features
和单个样本输出的维度out_features
,在我们的例子中, 它们分别是784和20:
layer1 = nn.Linear(in_features=784, out_features=20)
hidden1 = layer1(flat_image)
print(hidden1.size())
layer会对batch中的每个样本应用自己的处理手段:
nn.ReLU
这个层叫ReLU激活层,会对每个输入的元素进行一个ReLU函数的处理操作,其函数如下所示:
其使用方法也很简单:
print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")
ReLU层属于激活层的一种,核心作用是映入非线性,之所以要引入 ReLU,是因为如果没有它,神经网络无论有多少层,都只能处理线性问题。因为每层输出的都是上一层输入的线性变换。这样堆叠多层神经网络,其效果就等同于一个单层网络(矩阵乘矩阵还是矩阵)。
nn.Sequential
这个是演一个pytorch的模块,我比较喜欢叫它顺序容器。其内部是按顺序存放的各种layer,当数据通过这个容器的时候,会依次经过里面的layer,最后获得输出,这个一般是用来封装自己做的模块的。
seq_modules = nn.Sequential(flatten,layer1,nn.ReLU(),nn.Linear(20, 10)
)
input_image = torch.rand(3,28,28)
logits = seq_modules(input_image)
nn.Softmax
我们上面最后一个输出的线性层的值是在[-infty, infty]之间,要想把这10个神经元的输出调整成概率输出,就需要应用Softmax层,这里指定dim=1维度的数据进行softmax。
softmax = nn.Softmax(dim=1)
pred_probab = softmax(logits)
Softmax的原理如下图所示,负责把每个神经元的输出映射到一个类别概率。