前言:
思索了很久,我觉得需要一篇这样的文章,帮助大家边熟悉TensorFlow边复习深度学习。
一、TensorFlow
TensorFlow是一张计算的图,图上标满了计算节点和向量,跟着这些矢量一步一步往下计算就成了一个计算的流;如下图所示。而整张计算图并不是,随着一行Python代码计算而一步一步往下走,实际上,Python代码并不会切实计算,所有的参数只是真实值得一个引用,也就是说,Python代码只是在描绘这张计算图,并没有切实参与计算。只有当这张计算图“启动”之后,才会开始计算。
Python代码是什么,举一个简单的例子,如何描述这张图:
import tensorflow as tf
a = tf.constant([1,2],name="a")
b = tf.constant([2,3],name="b")
result = a + b
描述完之后如何启动这张计算图?
#创建一个会话session
with tf.Session() as sess:
sess.run(result)
通过这样,就可以知道,TensorFlow的运行确实有些许不同,但是往下使用,就会发现,除了这些区别,没有什么特别难理解的复杂操作。
二、深度学习
深度学习的“hello world”就是MNIST,但是我偏偏不拿它来做第一个例子,不是任性,而是换一种新鲜的血液,且多一个对比。假设要用深度学习来区分蓝点和黄点:
影响黄色和蓝色的因素,我们假设为温度和湿度,OK,这样的话,我们就要引入第一个概念:特征向量。“在机器学习中,所有用于描述实体的数字的组合就是一个实体的特征向量。”用这个做例子,特征向量就是(温度,湿度),两维,记作(X1,X2)。这个例子很简单,我们肉眼都能看到两者对结果的影响就是象限--但是机器不知道,怎么让机器更明确知道内在的关系与逻辑?--深度学习。于是我们想通过三层简单的网络,使得机器理解这个逻辑:
第一层就是输入层,就是我们的特征向量;第二层是隐藏层,第三层是输出层。
隐藏层的向前传播
输入层和输出层之间的都是隐藏层,一个隐藏层对应一个矩阵,这个矩阵记录这一些参数,层与层之间的运算就是就是矩阵相乘。
上面每一个点就是一个节点、或者说神经元,然后蓝色的节点功能就是对各