【pytorch】学习笔记-激励函数
学习自:莫烦python
什么是激励函数
一句话概括 Activation: 就是让神经网络可以描述非线性问题的步骤, 是神经网络变得更强大
1.激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题。
2.激励函数要考虑到线性所收到的约束条件,也就是掰弯线性函数
3.它其实就是另外一个非线性函数. 比如说relu, sigmoid, tanh. 将这些掰弯利器嵌套在原有的结果之上, 强行把原有的线性结果给扭曲了. 使得输出结果 y 也有了非线性的特征.
常用的函数的使用
1.你的神经网络层只有两三层, 不是很多的时候, 对于隐藏层, 使用任意的激励函数, 随便掰弯是可以的, 不会有特别大的影响
2.当你使用特别多层的神经网络, 在掰弯的时候, 玩玩不得随意选择利器. 因为这会涉及到梯度爆炸, 梯度消失的问题.
激励函数的使用场景
1.在少量层结构中, 我们可以尝试很多种不同的激励函数
2.在卷积神经网络 Convolutional neural networks 的卷积层中, 推荐的激励函数是 relu
3.在循环神经网络中 recurrent neural networks, 推荐的是 tanh 或者是 relu
各种激励函数的'掰弯效果'
import torch
import torch.nn.functional as F # 激励函数都在这
from torch.autograd import Variable
import matplotlib.pyplot as plt
# 做一些假数据来观看图像
# 函数的作用是,返回一个一维的tensor(张量),这个张量包含了从start到end,分成steps个线段得到的向量。常用的几个变量
x = torch.linspace(-5, 5, 200)#生成线性的空间
x = Variable(x)#转化成张量
x_np = x.data.numpy() # 换成 numpy array, 出图时用
# 几种常用的 激励函数
y_relu = F.relu(x).data.numpy()
y_sigmoid = F.sigmoid(x).data.numpy()
y_tanh = F.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()
# y_softmax = F.softmax(x) softmax 比较特殊, 不能直接显示, 不过他是关于概率的, 用于分类
#将掰弯后的线性函数显示出来
plt.figure(1, figsize=(8, 6))
plt.subplot(221)
plt.plot(x_np, y_relu, c='red', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')
plt.subplot(222)
plt.plot(x_np, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')
plt.subplot(223)
plt.plot(x_np, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')
plt.subplot(224)
plt.plot(x_np, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')
plt.show()