作者:杀你哥_52544 | 来源:互联网 | 2023-08-15 12:32
1.sigmoid函数:S(x)1(1+exp(-x))导数为:S(x)*(1-S(x))。这个数值不会超过0.25.。通过sigmoid函数计算的函数值在0~
1.sigmoid函数:
S(x)=1/(1+exp(-x))
导数为:S(x)*(1-S(x))。这个数值不会超过0.25.。通过sigmoid函数计算的函数值在0~1之间,如果神经网络的层数很多,如果每一层的激励函数采用sigmoid函数,就会产生梯度弥散的问题。因为利用BP函数更新参数的时候,会乘以它的导数,所以会一直减小。并且在比较大或者比较小的时候,会产生饱和效应,导致神经元类似与死亡。
2.tanh函数
T(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x))
导数:1-T(x)*T(x)
。tanh函数的值在-1~1之间。导数小于1.如果每一层用这个激励函数。会导致和sigmoid函数类似的情况。
3.elu函数
4.softplus函数
f(x)=ln(1+ex)
导数为:
f′(x)=ex1+ex=11+e−x。导数比较小
5.softsign函数
6.relu函数
f(x) = max(0, x)。这个函数经常用,可以解决梯度弥散问题,因为它的导师等于1或者就是0。
7. relu6函数
f(x) = max(0,6,x)。这个函数可以将激励函数的值数据位于0~6之间。
还有一些其他的函数变体,这里就不一一介绍。下面使用tensorflow画出的各种函数的图。
代码:
import tensorflow as tf;
import numpy as np;
import matplotlib.pyplot as plt;
x = np.linspace(-10,10,100)
y1 = tf.nn.sigmoid(x)
y2 = tf.nn.tanh(x)
y3 = tf.nn.elu(x)
y4 = tf.nn.softplus(x)
y5 = tf.nn.softsign(x)
y6 = tf.nn.relu(x)
y7 = tf.nn.relu6(x)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
ax1 = plt.subplot2grid((4,2), (0,0))
ax1.plot(x, sess.run(y1))
ax1.set_title('sigmoid')
ax2 = plt.subplot2grid((4,2), (0,1))
ax2.plot(x, sess.run(y2))
ax2.set_title('tanh')
ax3 = plt.subplot2grid((4,2), (1,0))
ax3.plot(x, sess.run(y3))
ax3.set_title('elu')
ax4 = plt.subplot2grid((4,2), (1,1))
ax4.plot(x, sess.run(y4))
ax4.set_title('softplus')
ax5 = plt.subplot2grid((4,2), (2,0))
ax5.plot(x, sess.run(y5))
ax5.set_title('softsign')
ax6 = plt.subplot2grid((4,2), (2,1))
ax6.plot(x, sess.run(y6))
ax6.set_title('relu')
ax7 = plt.subplot2grid((4,2), (3,0))
ax7.plot(x, sess.run(y7))
ax7.set_title('relu6')
plt.show()