线性连接层又叫全连接层(fully connected layer),是通过矩阵的乘法将前一层的矩阵变换为下一层矩阵。
W
被称为全连接层的权重weights,b
被称为全连接层的偏置bias。通常为了演示方便,我们忽略 bias。layer1
如果是一个(m*n)的矩阵,W是一个(n*k)的矩阵,那么下一层 layer2
就是一个(m*k)的矩阵。n
称为输入特征数(input size
),k
称为输出特征数(output size
),那么这个线性连接层可以被这样初始化:
fc = nn.Linear(input_size, output_size)
激活函数就是非线性连接层,通过非线性函数将一层转换为另一层。
常用的激活函数有:sigmoid
,tanh
,relu
及其变种。
虽然 torch.nn
有激活函数层,因为激活函数比较轻量级,使用 torch.nn.functional
里的函数功能就足够了。通常我们将 torch.nn.functional
写成 F
:
import torch.nn.functional as F
sigmoid
又叫做 logistic
,公式为:
sigmoid
的值域为 (0,1),所以通常用于二分类问题:大于0.5为一类,小于0.5为另一类。
sigmoid
的导数公式为:
导数的值域为(0,0.25)。sigmoid
函数的特点为:
tanh
是正切函数,公式为:
tanh
的值域为(-1,1) ,对称分布。它的导数公式为:
导数的值域为(0,1) 。tanh
的特点为:
relu
缓解了上述两个激活函数容易产生梯度消失的问题。它实际上是一个分段函数:
relu
的优点在于求导非常方便,而且非常稳定:
缺点在于:
为了解决relu
“死神经元”的问题,对其稍加改动成为了leakyrelu
:
阿尔法是一个很小的数,通常是 0.01。这样它的导数就变成了:
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。