3.4.1通过TensorFlow游乐场来简单介绍神经网络的主要功能及计算流程
3.4.2介绍神经网络的前向传播算法,并给出使用TensorFlow的代码实现
3.4.3如何通过TensorFlow中的变量来表达神经网络的参数
3.4.4介绍神经网络反向传播算法原理及TensorFlow对反向传播算法的支持
3.4.5给出一个完整的TensorFlow程序在随机的数据上训练一个简单的神经网络
3.4.1TensorFlow游乐场及神经网络简介
一个小格子代表神经网络中的一个节点,而边代表格子之间的连接.
每一个节点和边都涂上了或深或浅的颜色,但边上的颜色和格子中的颜色含义有略微的区别
(1)每一条边代表神经网络中的一个参数,他可以是任意实数.
神经网络就是通过对参数的合理配置来解决分类问题或者回归问题的.
边上的颜色代表了这个参数的取值,颜色越深值越大,颜色越浅值越小
(2)每一个节点的颜色代表了这个节点的区分平面
具体来说,如果把这个平面当成一个笛卡尔坐标系,这个平面的每一个点就代表(x1, x2)的一种取值
这个点的颜色就体现了x1,x2在这种取值下这个节点的输出值
综上所述:使用神经网络解决分类问题主要可以分为以下4个步骤:
1.提取问题中实体的特征向量作为神经网络的输入
2.定义神经网络的结构,并定义如何从神经网络的输入得到输出(神经网络的前向传播算法)
3.通过训练数据来调整神经网络中参数的取值
4.使用训练好的神经网络来预测未知的数据
3.4.2TensorFlow前向传播算法的简介
本章介绍最简单的全连接网络结构的前向传播算法
要了解神经网络的前向传播算法,首先要了解神经元的结构
特点:多个输入,一个输出
计算神经网络的前向传播结果需要三部分信息:
(1)神经网络的输入(实体的特征向量:零件的长度x1和零件的质量x2)
(2)神经网路的连接结构
(3)每个神经元中的参数(W:上标表示神经网络的层数,下标表示连接节点编号)
给定神经网络的输入,神经网络的结构以及边上的权重,就可以通过前向传播算法计算出神经网络的输出
图3-6展示了这个过程
总结一句话:加权求和,矩阵相乘
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
3.4.3神经网络参数与TensorFlow变量
本节介绍如何组织,保存以及使用神经网络中的参数
在TensorFlow中,变量(tf.Variable)的作用是保存和更新神经网络中的参数
变量也需要指定初始值
一般使用随机数为TensorFlow中的变量初始化
下面代码,在TensorFlow中声名一个2 * 3矩阵变量的方法
矩阵中的元素均值为0,标准差为2,random_normal函数可以通过参数mean来指定平均值,如果没有指定,默认为0
通过满足正态分布的随机数来初始化神经网络中的参数是一个非常常用的方法,除了正太分布,还有其他的,如下:
TensorFlow也支持通过常数来初始化一个变量,如下:
在神经网络中,偏置项(bias)通常会使用常数来设置初始值,以下代码给出了一个样例
问题:如果变量数目增多,或者变量之间存在依赖关系时,单个调用就比较麻烦
大大大大问题:变量和张量的关系??
变量的声明函数tf.Variable是一个运算,这个运算的输出结果就是一个张量,这个张量就是本节介绍的变量
所以,变量只是一种特殊的张量,下面介绍tf.Variable操作在TensorFlow中底层是如何实现的.
3.4.4通过TensorFlow训练神经网络模型
本节将简单介绍使用监督学习的方式来更合理地设置参数取值,同时给出TensorFlow程序
设置神经网络参数的过程就是神经网络的训练过程
只有经过有效训练的神经网络模型才可以真正的解决分类或者回归问题
监督学习思想:在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案
在神经网络优化算法中,最常用的方法是反向传播算法
图3-9展示了使用反向传播算法训练神经网络的流程图
反向传播算法实现了一个迭代的过程
每次迭代的开始,首先需要选取一小部分训练数据,这一小部分数据叫做一个batch
这个batch的样例会通过前向传播算法得到神经网络模型的预测结果
因为训练数据都是有正确答案标注的,所以可以计算预测答案与正确答案之间的差距
最后,根据这个预测值和真实值之间的差距,反向传播算法会相应更新神经网络的参数
TensorFlow实现反向传播算法的第一步是使用TensorFlow表达一个batch的数据
3.4.3小节使用常量来表达一个样例,几百万轮的迭代,计算图就特别大
所以,TensorFlow提供了placeholder机制用于输入数据