当前位置:   article > 正文

经典激活函数代码实现—relu、sigmoid、tanh、softplus、softmax_relu tanh sigmoid代码

relu tanh sigmoid代码

经典激活函数

relu、softplus、tanh、sigmoid、softmax

reLU

线性整流函数(Rectified Linear Unit, ReLU)
f ( x ) = m a x ( 0 , x ) f(x) = max(0,x) f(x)=max(0,x)
而在神经网络中,Relu作为神经元的激活函数,定义了该神经元在线性变换 w x + b wx+b wx+b之后的非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量,使用线性整流激活函数的神经元会输出

softplus

SoftPlus是ReLU函数的平滑近似,可用于将网络的输出约束为始终为正。

f ( x ) = log ⁡ ( 1 + e x ) f(x) = \log (1 + {e^x}) f(x)=log(1+ex)
它的导数是sigmoid
f ′ ( x ) = 1 1 + e − x f'(x) = \frac{1}{{1 + {e^{ - x}}}} f(x)=1+ex1
在这里插入图片描述

tanh

双曲正切函数(hyperbolic tangent function)是双曲函数的一种,经常简写为tanh,双曲正切函数(tanh)是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值,其形式为:
tanh ⁡ x = sinh ⁡ x cosh ⁡ x = e x − e − x e x + e − x \tanh x = \frac{{\sinh x}}{{\cosh x}} = \frac{{{e^x} - {e^{ - x}}}}{{{e^x} + {e^{ - x}}}} tanhx=coshxsinhx=ex+exexex
双曲的导数是双曲余弦的平方的倒数,即
( tanh ⁡ x ) ′ = 1 cosh ⁡ 2 x (\tanh x)' = \frac{1}{{{{\cosh }^2}x}} (tanhx)=cosh2x1

sigmoid

也被称为Logistic函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。Sigmoid作为激活函数有以下优缺点:
优点:平滑、易于求导。
缺点:激活函数计算量大,反向传播求误差梯度时,求导涉及除法;反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。

f ( x ) = 1 1 + e − x f(x) = \frac{1}{{1 + {e^{ - x}}}} f(x)=1+ex1
尤其!!
f ′ ( x ) = e − x ( 1 + e − x ) 2 = f ( x ) ( 1 − f ( x ) ) f'(x) = \frac{{{e^{ - x}}}}{{{{(1 + {e^{ - x}})}^2}}} = f(x)(1 - f(x)) f(x)=(1+ex)2ex=f(x)(1f(x))

softmax

归一化指数函数
f ( x ) j = e x j ∑ k = 1 K e z k f(x)_j = \frac{e^{x_j}}{\sum_{k=1}^K e^{z_k}} f(x)j=k=1Kezkexj
在这里插入图片描述
如果某一个 x j x_j xj 大过其他 x x x, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数:
第一个原因是要模拟 max 的行为,所以要让大的更大。第二个原因是需要一个可导的函数

Softmax 和 Sigmoid区别:

(1)分类问题

  • sigmoid将一个real value映射到(0,1)的区间,用来做二分类。
  • softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成(b1,b2,b3,b4….)其中 bi是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi的概率大小来进行多分类的任务。

(2)回归问题

  • softmax是sigmoid的扩展,当类别数 k=2 时,softmax 回归退化为 logistic 回归。

(3) 模型基于的分布不同

  • softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
  • 多个logistic回归通过叠加也同样可以实现多分类的效果,但是softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。

代码实现


import torch
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

#生成伪数据
x = torch.linspace(-5, 5, 200)  #torch.linspace(start, end, steps=100, out=None) → Tensor
                                #返回一个1维张量,包含在区间start和end上均匀间隔的step个点。
x = Variable(x)
x_np = x.data.numpy()   #用numpy数据生成plot

#常用激活函数 relu sigmoid tanh softplus softmax
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()
y_softmax = torch.softmax(x, dim=0).data.numpy() #sigmoid将一个real value映射到(0,1)的区间,用来做二分类
            # 而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)
            # 其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。
            # 二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax
            # 可以用于多分类问题多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,
            # 即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。


plt.figure(1, figsize=(8, 9))
plt.subplot(321)
plt.plot(x_np, y_relu, c='red', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')

plt.subplot(322)
plt.plot(x_np, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')

plt.subplot(323)
plt.plot(x_np, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')

plt.subplot(324)
plt.plot(x_np, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')

plt.subplot(325)
plt.plot(x_np, y_softmax, c='red', label='softmax')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')

plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

图像绘制结果

plot图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/874337
推荐阅读
相关标签
  

闽ICP备14008679号