由于加入了非线性因素,激活函数可以提取图像的高语义信息,帮助提升神经网络的表达能力。
常见的激活函数有Sigmoid, ReLU, Softmax函数。
1.Sigmoid函数
Sigmoid函数又称Logistic函数,模拟了生物的神经元特性。就是当神经元获得的输入信息累计超过一定的阈值后,神经元被激活处于兴奋状态,否则处于抑制状态。函数表达式:
Sigmoid函数可以用来完成二分类任务,但计算量大,容易出现梯度消失现象
Sigmoid的函数曲线:
# 绘制Sigmoid函数
import math
import matplotlib.pyplot as plt
import numpy as np
def sigmoid(x):
return 1 / (1 + math.exp(-x))
values_of_sigmoid = []
values_of_x = []
for i in range(-500, 500, 1):
i = i*0.01
values_of_x.append(i)
values_of_sigmoid.append(sigmoid(i))
plt.plot( values_of_x ,values_of_sigmoid)
plt.xlabel("values of x")
plt.ylabel("value of sigmoid")
plt.show()
可以看出Sigmoid将输入数值集中在0-1
Sigmoid的梯度曲线?
import math
import matplotlib.pyplot as plt
import numpy as np
def sigmoid(x):
return 1 / (1 + math.exp(-x))
def sigmoid_D(x):
return sigmoid(x)*(1-sigmoid(x))
values_of_sigmoid = []
values_of_x = []
for i in range(-500, 500, 1):
i = i*0.01
values_of_x.append(i)
values_of_sigmoid.append(sigmoid_D(i))
plt.plot( values_of_x ,values_of_sigmoid)
plt.xlabel("values of x")
plt.ylabel("value of sigmoid'(x)")
plt.show()
?
使用Pytorch实现Sigmoid函数:
import torch
form torch import nn
input = torch.ones(1, 1, 2, 2)
print(input)
# 使用nn.Sigmoid()实例化sigmoid
sigmoid = nn.Sigmoid()
sigmoid(input)
2. ReLU函数
ReLU( Rectified Linear Unit) 修正线性单元可解决梯度消失现象,是卷积神经网络中最常用的激活函数之一。ReLU的表达式:
ReLU的函数曲线:
def ReLU(x):
return max(0,x)
values_of_relu = []
values_of_x = []
for i in range(-500, 500, 1):
i = i*0.01
values_of_x.append(i)
values_of_relu.append(ReLU(i))
plt.plot(values_of_x, values_of_relu)
plt.xlabel("values of x")
plt.ylabel("value of relu(x)")
plt.show()
使用pytoch实现ReLU函数
# ReLU
import torch
from torch import nn
input = torch.randn(1, 1, 2, 2)
print(input)
relu = nn.ReLU(inplace = True)
relu(input)
|