我的一点理解
在某种意义上讲,深度学习=神经网络
是一个多层处理的过程
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,如语音识别、Gmail、Google 相册和搜索[3]:0:26/2:17,其中许多产品曾使用过其前任软件DistBelief。
TensorFlow最初由谷歌大脑团队开发,用于Google的研究和生产,于2015年11月9日在Apache 2.0开源许可证下发布。[1][5]
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范围之外操作的。
-
作图效果
-
说明
- 我是在TensorFlow1.14版本下操作的,目前TensorFlow已经升级到2.的版本,2.较之1.的版本做了很大的变动,很多语法不再支持
- 按顺序复制程序即可执行
-
参考文献