前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch6:nn.Linear&常用激活函数

PyTorch6:nn.Linear&常用激活函数

作者头像
小胡胡说
修改2020-08-11 10:31:21
12.4K0
修改2020-08-11 10:31:21
举报
文章被收录于专栏:小胡学编程

1. nn.Linear


线性连接层又叫全连接层(fully connected layer),是通过矩阵的乘法将前一层的矩阵变换为下一层矩阵。

W 被称为全连接层的权重weightsb 被称为全连接层的偏置bias。通常为了演示方便,我们忽略 bias。layer1 如果是一个(m*n)的矩阵,W是一个(n*k)的矩阵,那么下一层 layer2 就是一个(m*k)的矩阵。n 称为输入特征数(input size),k 称为输出特征数(output size),那么这个线性连接层可以被这样初始化:

代码语言:javascript
复制
fc = nn.Linear(input_size, output_size)

2. 激活函数


激活函数就是非线性连接层,通过非线性函数将一层转换为另一层。

常用的激活函数有:sigmoidtanhrelu及其变种。

虽然 torch.nn 有激活函数层,因为激活函数比较轻量级,使用 torch.nn.functional 里的函数功能就足够了。通常我们将 torch.nn.functional 写成 F

代码语言:javascript
复制
import torch.nn.functional as F

2.1 F.sigmoid


sigmoid 又叫做 logistic,公式为:

sigmoid 的值域为 (0,1),所以通常用于二分类问题:大于0.5为一类,小于0.5为另一类。

sigmoid 的导数公式为:

导数的值域为(0,0.25)。sigmoid 函数的特点为:

  1. 函数的值在(0,1)之间,符合概率分布;
  2. 导数的值域为(0,0.25) ,容易造成梯度消失;
  3. 输出为非对称正值,破坏数据分布。

2.2 F.tanh


tanh 是正切函数,公式为:

tanh 的值域为(-1,1) ,对称分布。它的导数公式为:

导数的值域为(0,1) 。tanh 的特点为:

  1. 函数值域为(-1,1) ,对称分布;
  2. 导数值域为(0,1) ,容易造成梯度消失。

2.3 F.relu


relu缓解了上述两个激活函数容易产生梯度消失的问题。它实际上是一个分段函数:

relu的优点在于求导非常方便,而且非常稳定:

缺点在于:

  1. 当x<0时导数为 0,神经元“死亡”,即不再更新;
  2. 虽然没有梯度消失的问题,但有梯度爆炸的问题。

2.4 F.leakyrelu


为了解决relu“死神经元”的问题,对其稍加改动成为了leakyrelu

阿尔法是一个很小的数,通常是 0.01。这样它的导数就变成了:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. nn.Linear
  • 2. 激活函数
    • 2.1 F.sigmoid
      • 2.2 F.tanh
        • 2.3 F.relu
          • 2.4 F.leakyrelu
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档