TensorFlow实现的激活函数可视化


书上的代码:

 1 # coding: utf-8
 2 
 3 # In[1]:
 4 
 5 import matplotlib.pyplot as plt
 6 import numpy as np
 7 import tensorflow as tf
 8 from pylab import *
 9 
10 
11 # In[19]:
12 
13 def show_activation(activation,y_lim=5):
14     x=np.arange(-10., 10., 0.01)
15     ts_x = tf.Variable(x)
16     ts_y =activation(ts_x )
17     with tf.Session() as sess:
18         init = tf.global_variables_initializer()
19         sess.run(init)
20         y=sess.run(ts_y)
21     ax = gca()
22     ax.spines['right'].set_color('none')
23     ax.spines['top'].set_color('none')
24     ax.spines['bottom'].set_position(('data',0))
25     ax.spines['left'].set_position(('data',0))
26     ax.xaxis.set_ticks_position('bottom')
27     ax.yaxis.set_ticks_position('left')
28     lines=plt.plot(x,y)
29     plt.setp(lines, color='b', linewidth=3.0)
30     plt.ylim(y_lim*-1-0.1,y_lim+0.1) 
31     plt.xlim(-10,10) 
32 
33     plt.show()
34 
35 
36 # In[20]:
37 
38 show_activation(tf.nn.sigmoid,y_lim=1)
39 
40 
41 # In[4]:
42 
43 show_activation(tf.nn.softsign,y_lim=1)
44 
45 
46 # In[5]:
47 
48 show_activation(tf.nn.tanh,y_lim=1)
49 
50 
51 # In[6]:
52 
53 show_activation(tf.nn.relu,y_lim=10)
54 
55 
56 # In[7]:
57 
58 show_activation(tf.nn.softplus,y_lim=10)
59 
60 
61 # In[8]:
62 
63 show_activation(tf.nn.elu,y_lim=10)
64 
65 
66 # In[14]:
67 
68 a = tf.constant([[1.0,2.0],[1.0,2.0],[1.0,2.0]])
69 sess = tf.Session()
70 print(sess.run(tf.sigmoid(a)))
71 
72 
73 # In[ ]:
View Code

sigmoid激活函数:

S(x)=1/(1+e-x)

优点在于输出映射在0-1内,单调连续,适合做输出层,求导容易。

缺点在于软饱和性,即当x趋于无穷大时,一阶导数趋于0,容易产生梯度消失,神经网络的改善缓慢或消失。

softsign激活函数:

tanh激活函数:

tanh(x)=(1-e-2x)/(1+e-2x)

也具有软饱和性,收敛速度比sigmoid快,但是仍无法解决梯度消失的问题。

relu激活函数:

f(x)=max(x,0)

缺点:当relu在x<0时硬饱和,即在负半轴,激活函数的一阶导数等于0。

优点:由于x>0时导数为1,所以relu能在正半轴保持梯度的不衰减,缓解梯度消失的问题。

但是随着训练的进行,部分落入硬饱和区,权重无法更新。

softplus激活函数:

relu的平滑版本f(x)=log(1+exp(x))

此外还有的激活函数如下数张图:

等等..............................................................................................

......................................................................................................

输入数据特征相差明显时,tanh效果较好,不明显时,sigmoid较好。二者在使用时需要对输入进行规范化,减少进入平坦区的可能。

relu是比较流行的激活函数,不需要输入量的规范化等...

优质内容筛选与推荐>>
1、在Java 平台上进行多线程编程的缺点
2、MFC:BMP图像
3、程序是怎样跑起来的 第八章
4、spring batch (二) 元数据表
5、算法与数据结构学习


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn