pytorch sigmoid pytorch sigmoid函数_机器学习


激活函数层

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

Sigmoid函数

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

pytorch sigmoid pytorch sigmoid函数_机器学习_02

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


pytorch sigmoid pytorch sigmoid函数_机器学习_03


用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]
#]]])
ReLU函数

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

pytorch sigmoid pytorch sigmoid函数_pytorch_04

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


pytorch sigmoid pytorch sigmoid函数_pytorch sigmoid_05


用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]
#]]])
Softmax函数

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

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

pytorch sigmoid pytorch sigmoid函数_pytorch sigmoid_06

用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]
#])

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