首页 >> 大全

深度学习笔记(三):神经网络之九种激活函数Sigmoid、tanh、ReLU、R

2023-09-18 大全 19 作者:考证青年

文章目录

1.什么叫激活函数

激活函数可作用于感知机(wx+b)累加的总和 ,所谓的激活就是把输出值必须要大于,节点才可以被激活,不然就处于睡眠状态。

2.激活函数的作用

提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。由于输出值是有限的,基于梯度的优化方法会更加稳定。输出值是无限的时候,模型的训练会更加高效,但往往这个时候学习率需要更小。

3.激活函数的类型

、tanh、ReLU、ReLU6、Leaky Relu、ELU、

4./

函数定义:

函数图像:

函数的导数是其本身的函数,即f′(x)=f(x)(1−f(x)),计算非常方便。

这可用做神经网络的阈值数,将变量映射到0,1之间。由于在图像两端,该函数导数趋近于0,也就是说的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散(也就是说长时间权值得不到更新,loss一直保持不变),从而网络参数很难得到有效训练。一般来说, 网络在 5 层之内就会产生梯度消失现象。

代码实现:

"""pytorch 神经网络"""
import torch.nn.functional as F
F.sigmoid(x)

# sigmoid函数在torch中如何实现import torch
# a从-100到100中任取10个数
a = torch.linspace(-100,100,10)
print(a)
# 或者F.sigmoid也可以 F是从from torch.nn import functional as F
b = torch.sigmoid(a)
print(b)

运行结果:

从图中可知道通过函数把全部的值映射到0,1之间,且不均与变化。 5.tanh

函数定义:

值域为(-1,1)

tanh()为双曲正切。在数学中,双曲正切tanh是由基本双曲函数双曲正弦和双曲余弦推导而来。

函数图像

tanh和的关系:的X轴平面压缩1/2,Y轴放大两倍,再向下平移一个单位得到tanh。

tanh函数的导数:f’(x)=1-[f(x)]^2.

优点:

缺点:

代码实现:

# tanh函数在torch中如何实现
import torch
a = torch.linspace(-10,10,10)
b = torch.tanh(a)
print(a)
print(b)

运行结果:

6.ReLU

函数定义:

函数图像:

ReLU函数非常适合于做深度学习,因为当Z0的时候梯度为1,因此在做向后传播的时候,计算非常方便,不放大也不缩小,很大程度上不会出现梯度离散和梯度爆炸的情况。

代码实现:

"""pytorch 神经网络"""
import torch.nn as nn
Re=nn.ReLU(inplace=True)

# ReLU函数在torch中如何实现
import torch
a = torch.linspace(-1,1,10)
b = torch.relu(a)
print(a)
print(b)

运行结果:

7.ReLU6

函数定义:

函数图像:

主要是为了在移动端的低精度的时候,也能有很好的数值分辨率,如果对ReLu的输出值不加限制,那么输出范围就是0到正无穷,而低精度的无法精确描述其数值,带来精度损失。

代码实现:

"""pytorch 神经网络"""
import torch.nn as nn
Re=nn.ReLU6(inplace=True)

# ReLU函数在torch中如何实现
import torch
import torch.nn as nnx = torch.linspace(-5, 10, 20)
relu6 = nn.ReLU6()
y = relu6(x)
print(x)
print(y)

运行结果:

8.Leaky ReLU

函数定义:

在输入 x < 0 x < 0x

函数图像:

优点:

缺点:

代码实现:

"""pytorch 神经网络"""
import torch.nn as nn
LR=nn.LeakyReLU(inplace=True)

# tensorflow实现LeakyRelu函数
import tensorflow as tf
def LeakyRelu(x,leak = 2,name = 'LeakyRelu'):with tf.variable_scope(name):f1 = 0.5*(1+leak)f2 = 0.5*(1-leak)return f1*x+f2*tf.abs(x)if __name__ == '__main__':a = LeakyRelu(4.0)print(a)

运行结果:

9.ELU

函数定义:

函数图像:

右侧的线性部分能够缓解梯度消失,左侧的软饱和能够对于输入变化鲁棒.而且收敛速度更快.

代码实现:

# ELU函数在numpy上的实现import numpy as np
import matplotlib.pyplot as pltdef elu(x, a):y = x.copy()for i in range(y.shape[0]):if y[i] < 0:y[i] = a * (np.exp(y[i]) - 1)return y
if __name__ == '__main__':x = np.linspace(-50, 50)a = 0.5y = elu(x, a)print(y)plt.plot(x, y)plt.title('elu')plt.axhline(ls='--',color = 'r')plt.axvline(ls='--',color = 'r')# plt.xticks([-60,60]),plt.yticks([-10,50])plt.show()

运行结果:

10.Swish

class Swish(nn.Module):def __init__(self):super(Swish, self).__init__()def forward(self, x):x = x * F.sigmoid(x)return x

11.Mish

相比Swish有0.494%的提升,相比ReLU有1.671%的提升。

为什么Mish表现的更好:

#-------------------------------------------------#
#   MISH激活函数
#-------------------------------------------------#
class Mish(nn.Module):def __init__(self):super(Mish, self).__init__()def forward(self, x):return x * torch.tanh(F.softplus(x))

12.

函数定义:

Vi表示第i个神经元的输出,其实就是在输出后面套一个这个函数

函数作用:用于处理多分类问题,将N个输出的数值全部转换为N个相对概率。比如说

这里有个特点,就是这里所有的概率值全部加起来等于1. S1 = 0.8390,对应的概率最大,概率越大预测为第1类的可能性更大。

代码简单实现:

# Softmax实现
import numpy as np
def Softmax(x):n = np.exp(x)/np.sum(np.exp(x))return n
if __name__ == '__main__':x = [3.0,1.0,2.0]a = Softmax(x)print(a)

运行结果:

一维和二维矩阵的代码实现:

# Softmax二维和三维矩阵的实现
import numpy as npdef Softmax(x):print("orig_shape", x.shape)if len(x.shape) > 1:# 矩阵 轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。# 关键词:轴具有方向,且axis=0,即0轴,从上到下;axis=1,即1轴,从左到右。axis=-1也就是代表倒数第一个,如果对于矩阵是一个shape=[3,4,5],axis=-1就等于axis=2,也就是得到一个[3,4]的矩阵,tmp = np.max(x, axis=1)x -= tmp.reshape((x.shape[0], 1)) # 变为两行一列x = np.exp(x)y = x / np.sum(x, axis=1).reshape((x.shape[0], 1))print("matrix")print(y)return yelse:# 向量x -= np.max(x)  # scores becomes [-666, -333, 0]y = np.exp(x) / np.sum(np.exp(x))print("Vector quantity")print(y)return yif __name__ == '__main__':x = np.array([1,2,3,4])x1 = np.array([[1,2,3,4],[1,2,3,4]])Softmax(x)Softmax(x1)

运行结果:

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了