BNN常⽤激活函数总结
包包图片
1. 常⽤激活函数
1.1 阔值激活函数
当激活值⼤于0时为1,否则为0
由于导数在 x=0 时,不连续,所以不可以⽤于梯度下降训练
# Customize an threshold activation function
def threshold(x):
cond = tf.less(x, tf.zeros(tf.shape(x), dtype=x.dtype))
out = tf.where(cond, tf.zeros(tf.shape(x)), tf.ones(tf.shape(x)))
return out
小孩发热
# plot
x = np.linspace(-1, 1, 50)
out = threshold(x)
西餐刀叉拿法tf.compat.v1.disable_eager_execution()
ss = tf.compat.v1.Session()
pat.v1.Session() as ss:
y = ss.stant(out))
plt.xlabel('X')
志愿服务活动
plt.ylabel('Y')
plt.title('Threshold Activation Function')
plt.plot(x, y)
plt.show()
阅读摘抄
Graph
1.2 Sigmoid
tensorflow内置了 tf.sigmoid()实现
输出值范围 (0, 1)
该函数在两端导数为趋近于0,故会出现梯度消失(梯度弥散现象)问题,使得样本训练和优化变得越发困难# plot
x = np.linspace(-10, 10, 50)
out = tf.sigmoid(x)
ss = tf.compat.v1.Session()
pat.v1.Session() as ss:
40岁生日
y = ss.stant(out))
学笛子的基本知识plt.xlabel('X')
plt.ylabel('Y')
plt.title('Sigmoid Activation Function')
plt.plot(x, y)
plt.show()
Graph
落花生读后感1.3 ReLU
负值输⼊为0,正值输⼊时,输出值和输⼊值相同
负值输⼊为0的特性(稀疏激活)使得计算量⼤⼤减少
避免了梯度弥散,是⼤部分⽹络模型的⾸选激活函数
# plot
x = np.linspace(-10, 10, 50)
out = lu(x)
ss = tf.compat.v1.Session()
pat.v1.Session() as ss:
y = ss.stant(out))
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Sigmoid Activation Function')
plt.plot(x, y)
plt.show()
Graph
1.4 Softmax
函数输出值范围 [0, 1]
所有输出值和为1,故改激活函数被⼴泛⽤于分类任务⽹络模型的输出层
# plot
x = np.linspace(-10, 10, 50)
out = tf.nn.softmax(x)
ss = tf.compat.v1.Session()
pat.v1.Session() as ss:
y = ss.stant(out))
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Softmax Activation Function')
plt.plot(x, y)
plt.show()
Graph
2. Notes
ReLU函数由于其函数特性,⽽具有单侧抑制性,同时避免了梯度弥散的出现,因此在多层⽹络模型中都表现良好,所以在深层⽹络模型中,最常⽤的激活函数还是ReLU