神经层是神经网络的主要成员,PyTorch有各种各样的神经层,详情可参阅官网 [12] ,如下列举了一些比较常见的类别,随着算法的发明,还会不断地增加,也可以自定义神经层(Custom layer)。
· 完全连接层(Linear Layers);
· 卷积神经层(Convolution Layers);
· 池化神经层(Pooling Layers);
· 常态化神经层(Normalization Layers);
· 循环神经层(Recurrent Layers);
· Transformer Layers;
· Dropout Layers。
由于中文翻译大部分都不贴切原意,建议读者尽可能使用英文术语。
完全连接层(Linear)是最常见的神经层,上一层每个输出的神经元( y )都会完全连接到下一层的每个输入的神经元( x ),即 y = wx + b 。语法如下:
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
in_features:输入神经元个数。
out_features:输出神经元个数。
bias:训练出的模型是否含偏差项(bias)。
device:以CPU或GPU设备训练。
dtype:输出、输入张量的数据类型。
通常只设置前面两个参数。
请参阅程序 【03_04_完全连接层.ipynb】 。
Dropout Layer在每一次epoch/step训练时,会随机丢弃设定比例的输入神经元,避免过度拟合,只在训练时运作,预测时会忽视Dropout,不会有任何作用。语法如下:
torch.nn.Dropout(p=0.5, inplace=False)参数说明如下:
p:丢弃的比例,介于(0, 1)之间。
inplace=True:对输入直接修改,不另产生变量,节省内存,通常不设定。
根据大部分学者的经验,在神经网络中使用Dropout会比正则化(Regularizer) [13] 效果来得好。
Dropout不会影响输出神经元个数。
执行结果:输入维度为(20, 16),输出维度仍是(20, 16)。
其他的神经层在后续算法使用到时再说明。