TensorFlow中的激活函数

原文地址

分类目录——TensorFlow

我的一点理解

在某种意义上讲,深度学习=神经网络
是一个多层处理的过程
x0 -> y_1=f(Wx0) -> y_2=f(Wx1) -> y_3=f(Wx2) -> . . . -> y=f(Wx(n-1))
其中每一层
	先进行一轮“直”(线性的)的操作:y。=Wx,就是个加权,y。中的每一个数据都是对x中所有数据的一个加权和
	再进行一轮“弯”(非线性的)的操作:y_ =f(y。),其中f()是一个非线性的函数,它把直的掰弯,可以构造更多的可能,拓展了深度学习的应用领域
*注:完整的“直”(线性的)操作部分应该还有一个偏置b,即y。= Wx+b,这里为了简化说明,就默认b=0了

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。[3]当前被50个团队[3]:min 0:15/2:17用于研究和生产许多Google商业产品[4]:p.2,如语音识别GmailGoogle 相册和搜索[3]:0:26/2:17,其中许多产品曾使用过其前任软件DistBelief。

TensorFlow最初由谷歌大脑团队开发,用于Google的研究和生产,于2015年11月9日在Apache 2.0开源许可证下发布。[1][5]

引自 维基百科_TensorFlow

TensorFlow中封装了一些常用的激活函数,这里通过程序来看一些这些激活函数的效果

  • 导入支持包

    import tensorflow as tf
    import numpy as np
    
  • 生成输入数据

    x = tf.Variable(np.linspace(-5, 5, 200)[:, np.newaxis])  # .np.newaxis作用为增加1个维度,x.size=(200,1)
    
    # 激活函数可以理解为 y_=f(Wx) ,
    # 为了后面更好的观察激活函数的效果, 这里令W=“1”, 即y=x
    # 则y_=f(Wx)=f(x)
    W = tf.Variable(np.eye(200))  # 对角矩阵
    # 当传入值为5是,np.eye(5)=
    # [[1. 0. 0. 0. 0.]
    #  [0. 1. 0. 0. 0.]
    #  [0. 0. 1. 0. 0.]
    #  [0. 0. 0. 1. 0.]
    #  [0. 0. 0. 0. 1.]]
    
  • 线性运算部分 Wx

    # 线性运算
    y_ = tf.matmul(W, x)	# tf中的矩阵点乘
    
  • 非线性激活部分

    # 激活
    y_relu = tf.nn.relu(y_, name=None)
    y_sigmoid = tf.sigmoid(y_, name=None)
    y_relu6 = tf.nn.relu6(y_, name=None)
    y_softplus = tf.nn.softplus(y_, name=None)
    y_tanh = tf.nn.tanh(y_, name=None)
    # y_softmax = tf.nn.softmax(y_)     # softmax 比较特殊, 不能直接显示, 不过他是关于概率的, 用于分类
    # y_scewl = tf.nn.softmax_cross_entropy_with_logits(y_)
    
  • 执行与作图观察

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        # print(sess.run(x))
    
        # 作图观察
        import matplotlib.pyplot as plt  # python 的可视化模块
    
        plt.figure(1, figsize=(12, 6))
        plt.subplot(231)
        # 所有的值都需要run(初始化),所有的操作都需要run(操作)
        plt.plot(sess.run(x), sess.run(y_relu), c='red', label='relu')
        plt.ylim((-1, 5))
        plt.legend(loc='best')
    
        plt.subplot(232)
        plt.plot(sess.run(x), sess.run(y_sigmoid), c='red', label='sigmoid')
        plt.ylim((-0.2, 1.2))
        plt.legend(loc='best')
    
        plt.subplot(233)
        plt.plot(sess.run(x), sess.run(y_relu6), c='red', label='relu6')
        plt.ylim((-1, 5))
        plt.legend(loc='best')
    
        plt.subplot(234)
        plt.plot(sess.run(x), sess.run(y_tanh), c='red', label='tanh')
        plt.ylim((-1.2, 1.2))
        plt.legend(loc='best')
    
        plt.subplot(235)
        plt.plot(sess.run(x), sess.run(y_softplus), c='red', label='softplus')
        plt.ylim((-0.2, 6))
        plt.legend(loc='best')
    
        plt.show()
    

    因为TensorFlow的所有操作包括数据获取都必须要有sess.run()的操作,所以作图部分也写在了Session()的范围中,当然也可以写在外面,可以在Session的范围内把执行结果传递给一个非tensor变脸,如np.ndarray,只需要在Session内np_x=sess.run(x),np_relu=sess.run(y_relu),np_x和np_relu是可以在Session范围之外操作的。

  • 作图效果

    1581212334240

  • 说明

    • 我是在TensorFlow1.14版本下操作的,目前TensorFlow已经升级到2.的版本,2.较之1.的版本做了很大的变动,很多语法不再支持
    • 按顺序复制程序即可执行
  • 参考文献

    Pytorch中的激活函数

发布了102 篇原创文章 · 获赞 68 · 访问量 5118

猜你喜欢

转载自blog.csdn.net/BBJG_001/article/details/104244355