文章目录
作用
非线性激活函数获取输入,并对其进行数学变换后生成输出;
非线性激活函数为神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,可以应用到非线性模型中;如果不使用,则只能适合线性模型。
Sigmoid
Sigmoid激活函数输入实数,输出结果为0到1之间;
对于一个极大的负值,返回结果接近于0;对于一个极大的正值,返回结果接近于1;
表达式:
弊端:当输出值接近于0或1时,Sigmoid函数前一层的梯度接近于0;此时前一层的权重无法经常调整,从而产生了无效神经元。
代码与绘制:
import torch #引用torch
import matplotlib.pyplot as plt #引用matplotlib
import os #引用OS
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
x_tor = torch.linspace(-5, 5, 200) #使用torch在区间[-5,5]上均匀的生成200个数据
x_np = x_tor.data.numpy() #将数据转换成np的数据类型
y_sigmoid = torch.sigmoid(x_tor).data.numpy() #sigmoid激活函数
plt.plot(x_np, y_sigmoid, c='blue', label='sigmoid') #坐标轴赋值及描述信息
plt.ylim((-0.2, 1.2)) #设置Y轴上下限
plt.legend(loc='best') #给图像加图例
plt.show() #显示绘制的图像
tanh
非线性函数tanh输出结果为-1到1之间;
表达式:
所以当tanh输出极值接近-1和1时,也面临梯度饱和的问题;但是其输出是以0为中心的,实际应用中会比Sigmoid更好;
代码与绘制:
import torch #引用torch
import matplotlib.pyplot as plt #引用matplotlib
import os #引用OS
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
x_tor = torch.linspace(-5, 5, 200) #使用torch在区间[-5,5]上均匀的生成200个数据
x_np = x_tor.data.numpy() #将数据转换成np的数据类型
y_tanh = torch.tanh(x_tor).data.numpy() #tanh激活函数
plt.plot(x_np, y_tanh, c='blue', label='tanh') #坐标轴赋值及描述信息
plt.ylim((-1.2, 1.2)) #设置Y轴上下限
plt.legend(loc='best') #给图像加图例
plt.show() #显示绘制的图像
ReLU
ReLU有助于优化器更快的找到正确的权重集合。可以使随机梯度下降收敛的更快;计算速度非常快;
但是当一个很大的梯度进行反向传播时,流经的神经元会变得无效;可以通过调整学习率来控制;
表达式:
ReLU把所有负值取作0,正值保持不变;
代码与绘制:
import torch #引用torch
import matplotlib.pyplot as plt #引用matplotlib
import os #引用OS
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
x_tor = torch.linspace(-5, 5, 200) #使用torch在区间[-5,5]上均匀的生成200个数据
x_np = x_tor.data.numpy() #将数据转换成np的数据类型
y_relu = torch.relu(x_tor).data.numpy() #ReLU激活函数
plt.plot(x_np, y_relu, c='blue', label='relu') #坐标轴赋值及描述信息
plt.ylim((0, 6)) #设置Y轴上下限
plt.legend(loc='best') #给图像加图例
plt.show() #显示绘制的图像
Leaky ReLU
Leaky ReLU尝试解决一个问题死角,不再将饱和度置为0,而是设为一个非常小的数值,如0.01;
Leaky ReLU是给所有负值赋予一个非零斜率;
这一激活函数对于某些用例提供了更优异的性能,但是他不是连续的。
SoftPlus
SoftPlus平滑版的ReLU;
表达式:
代码与绘制:
import torch #引用torch
import matplotlib.pyplot as plt #引用matplotlib
import torch.nn.functional as F #引用torch.nn.functional
import os #引用OS
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
x_tor = torch.linspace(-5, 5, 200) #使用torch在区间[-5,5]上均匀的生成200个数据
x_np = x_tor.data.numpy() #将数据转换成np的数据类型
y_softplus = F.softplus(x_tor).data.numpy() #tanh激活函数
plt.plot(x_np, y_softplus, c='blue', label='softplus') #坐标轴赋值及描述信息
plt.ylim((0, 6)) #设置Y轴上下限
plt.legend(loc='best') #给图像加图例
plt.show() #显示绘制的图像
开发环境
Author:Lizhifun
OS:Windows 10 家庭中文版
Python:3.8.5
Pytorch:1.7.1