线性连接层又叫全连接层(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 删除。