一起来学PyTorch——神经网络(激活函数层)

激活函数层

神经网络如果只由卷积运算组成,则无法形成复杂的表达空间,也很难提取出高语义的信息。因此还需要加入非线性的映射,又称为激活函数,可以逼近任意的非线性函数,用来提升整个神经网络的表达能力。常用Sigmoid、ReLU和Softmax函数。

  1. Sigmoid函数

Sigmoid函数又称为Logistic函数,在机器学习的二分类模型中,常用的逻辑回归就是使用了Sigmoid函【对机器学习二分类的逻辑回归感兴趣的同学,可以留言】。在神经网络中,用Sigmoid函数来模拟生物的神经元特性,即当神经元获得的输入信号累计超过一定的阈值后,神经元被激活,输出电信号,否则处于抑制状态。

Sigmoid函数曲线与梯度曲线如下图,可以看到,Sigmoid函数将特征压缩到了(0, 1)区间,0对应抑制状态,1对应激活状态,中间部分梯度较大。

用pytroch实现,实例如下:

import torch
from torch import nn

input = torch.ones(1, 1, 2, 2)
# 使用nn.Sigmoid()创造sigmoid实例
sigmoid = nn.Sigmoid()
output = sigmoid(input)
# ⬇⬇⬇⬇⬇结果t为⬇⬇⬇⬇⬇
#tensor([[[
#      [0.7311, 0.7311],
#      [0.7311, 0.7311]
#]]])

  1. ReLU函数

为了缓解梯度消失现象,修正线性单元被引入到神经网络中。由于其优越的性能和简单的实现过程,ReLU已经成为最为常用的激活函数之一。

ReLu函数及其梯度曲线如下图所示。在小于0的部分,梯度为0,在大于0的部分梯度为1.避免了Sigmoid函数中梯度接近于0,而导致的梯度消失问题。

用pytorch实现,实例如下:

import torch
from torch import nn

input = torch.randn(1, 1, 2, 2)
# nn.ReLU()可以实现inplace操作,即运算结果直接覆盖输入的值
relu = nn.ReLU(inplace=True)
output = relu(input)
#⬇⬇⬇⬇⬇结果为⬇⬇⬇⬇⬇
#tensor([[[
#        [1.8021, 0.5564],
#        [0.0000, 1.2384]
#]]])

  1. Softmax函数

在物体检测中,通常需要面对多物体分类的问题,虽然可以使用Sigmoid函数来构造多个二分类器,但是比较麻烦。多物体分类经常使用Softmax函数。

在具体的分类任务中,Softmax函数的输入经常是多个类别的得分,输出则是每一个类别对应的概率,所有类别的概率取值都在0~1之间,且和为1。

用pytorch实现,实例如下:

import torch.nn.function as F

score = torch.randn(1, 4)
# 利用torch.nn.functional.softmax()函数,第二个参数表示按照第几个维度进行
output = F.softmax(score, 1)
# ⬇⬇⬇⬇⬇结果为⬇⬇⬇⬇⬇ 
#tensor([
#       [0.5355, 0.0858, 0.0230, 0.3557]
#])


欢迎大家关注,共同交流,每天都会看私信和评论!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值