pytorch学习笔记 1.3 激励函数(Activation Function)

一、什么是激励函数?

1. 激励函数

1、激励函数就是解决现实生活中不能用线性方程所概括的问题。
2、对于线性问题,用 y = Wx 表示;对于非线性问题,用 y = AF(Wx) 表示
3、AF 指激励函数,也就是非线性函数,将其嵌套在原有的结果上,强行把原有的线性结果扭曲,使得输出结果 y 也有了非线性的特征;例如:relu、sigmoid、tanh;
4、可以创造自己的激励函数,但是激励函数必须是可微分的,因为在误差反向传递的时候,只有可微分的函数才能把误差传递回去。

2. 常用选择

1、当神经网络层只有两三层, 不是很多的时候, 对于隐藏层,使用任意的激励函数便可以将结果扭曲;
2、对于多层的神经网络,要考虑梯度爆炸、梯度消失等问题,需要慎重考虑所需选择的激励函数;
3、少量层结构中可以尝试不同的激励函数;
1)卷积神经网络 推荐relu
2)循环神经网络 推荐relu or tanh

二、Torch 中常用的激励函数

import torch
import torch.nn.functional as F	# 激励函数都在这
from torch.autograd import Variable
import matplotlib.pyplot as plt

# 做一些假数据来观看图像
x = torch.linspace(-5, 5, 200)  # [-5,5] 分成200个线段,返回一个一维tensor
x = Variable(x)					# 放在Variable的这个书包里面
x_np = x.data.numpy()   # torch是不能被画图的plt识别,所以转换成numpy的数据

# 几种常用的 激励函数
y_relu = torch.relu(x).data.numpy()
y_sigmoid = torch.sigmoid(x).data.numpy()
y_tanh = torch.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()

# 可视化这些激励函数
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()

运行结果(会自动弹出图片框):
pytorch学习笔记 1.3 激励函数(Activation Function)_第1张图片
注释:y_softmax = torch.softmax(x, dim=0).data.numpy() 不输出的原因是:softmax 比较特殊, 不能直接显示, 不过他是关于概率的, 用于分类

你可能感兴趣的:(pytorch)