Tensorflow实战Google学习框架-1

第一章:深度学习简介
 
1⃣️应用有
1.计算机视觉
2.语音识别
3.自然语言处理
4.人机博弈
 
2⃣️深度学习,机器学习,AI 的关系
 
3⃣️主流的深度学习开源工具
 
最流行的是Tensorflow。
 
 
第二章:Tensorflow环境搭建
 
1⃣️Protocol Buffer和Bazel工具
 
2⃣️Tensorflow测试样例
 
 
 
第三章:Tensorflow入门
 
1⃣️Tensorflow计算模型——计算图
Tensorflow由Tensor和Flow组成,Tensor表示张量,张量可以理解为多位数组。
Flow是“流”的意思,它直观的表达了张量之间通过计算相互转换的过程。
Tensorflow是一个通过计算图的形式来表达计算的编程系统。
 
Tensorflow的每一个计算都是计算图上的和一个节点,而节点之间的边描述了计算之间的依赖关系。
如下所示:
 
2⃣️计算图的使用
Tensorflow程序一般分为两个阶段:计算图中的所有计算 和 执行计算。
tf.get_default_graph()函数可以获取当前默认的计算图
Tensorflow也支持通过tf.Graph()函数生成新的计算图,不同计算图中的张量和运算都不会共享。
计算图可以通过tf.Graph.device()函数来制定运行计算的设备,如tf.Graph.device(‘/gpu:0’)运行在GPU上
计算图对程序中的资源进行整理,通过集合(collection)来管理不同的资源。
 
3⃣️Tensorflow数据模型——张量
在Tensorflow中所有的数据都是以张量的形式来表示。张量可以简单理解为多维数组,零阶张量就是标量scalar,也就是一个数,
一阶张量为向量vector,n阶张量就是n维向量。
需要注意的是,在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。
Tensorflow计算的结果不是一个具体的数字,而是一个张量的结构。
一个张量主要保存三个属性:名字name,维度shape 和 类型type。
 
张量的第一个属性名字是一个张量的唯一标识符。
上例中的“add:0”表示result这个结果是计算节点“add”输出的第一个结果。(编号从0开始)
 
4⃣️Tensorflow支持的数据类型
 
5⃣️张量的使用
主要有两类:
1.对中间计算结果的引用,提高代码的可读性,可以查看中间计算结果等
2.用来获得计算的真正结果,虽然张量没有存储具体的数字,但是可以通过绘画Session得到具体的数字。
  如tf.Session.run(result)可以得到result的具体结果。
 
5⃣️Tensorflow运行模型——会话session
会话拥有并管理Tensorflow程序运行是的多有资源。Tensorflow使用会话的模式主要有两种。
第一种:明确调用会话生成函数和关闭会话函数
第二种:可以通过with语句通过上下文来使用会话
会话被指定后,可以通过eval()函数获得张量的数值。
如 print(result.eval())
 
 
6⃣️Tensorflow实现神经网络
前向传播算法:forward-propagatoion
参数:学习率(learning rate),激活函数(activation),正则化(regularization)
 
1.神经元结构
一个神经元有多个输入和一个输出。
 
2.神经网络结构
神经网络中神经元也可以称为:节点。
 
3事例演示
 
4.Tensorflow变量
声明了一个2X3的矩阵,矩阵中的元素的均值mean为0,标准差stddev为2 的随机数。
 
 
5.变量被声明后,必须要初始化 initializer
比如上例中的w1,需要调用sess.run(w1.initializer)进行初始化
 
6.初始化所有的变量
当变量比较多时,上边的初始化就会比较繁琐,Tensorflow提供了初始化所有变量的方法
还可以用global_variables_initializer():
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
 
7.张量与变量的关系
变量的声明函数tf.Variabel()是一个运算,这个运算的输出结果就是一个张量,所以变量时一种特殊的张量。
 
8.变量在Tensorflow底层时如何实现的?
 
9.集合collection的概念
Tensorflow中所有的变量都会自动被加入到GraphKeys.VARIABLES这个集合中。
通过tf.all_variables()函数可以拿到当前计算图中的宿友变量。
 
10.变量的维度shape和类型type
变量的类型是不可改变的。
变量的维度可以改变,但是需要设置参数validate_shape=False,如:
 
11.通过Tensorflow训练神经网络模型
设置神经网络参数的过程就是神经网络的训练过程。
在神经网络优化算法中,最常用的方法是反向传播算法。
反向传播算法流程图:
选取的一部分训练数据称为:batch。
 
12.placeHolder机制,避免生成大量的常量
Tensorflow提供了placeholder机制用于提供输入数据。placeholder相当于定义了一个位置。,这个位置的数据在程序运行时再指定。
长在程序中就不需要生成大量常量来提供输入数据。
如:
 
13.损失函数
在得到一个batch的前向传播结果之后,需要定义一个损失函数来计算误差,以此进行对参数取值的调整。
 
交叉熵:cross-entropy, 一个常用的损失函数
 
 
14.第三章总结
 
 
 
 
第四章:深度神经网络
深度学习:一类通过多层非线性变换对高复杂数据建模算法的合集。
因为深层神经网络是实现“多层非线性变化”最常用的一种方法,所以在实际中可以认为深度学习就是深层神经网络的代名词。
 
深度学习有两个重要特性:多层 和 非线性
 
1⃣️线性模型的局限性
 
2⃣️激活函数实现去线性化
加入激活函数和偏置项之后的神经元结构
对比原始的神经元结构
其中偏置项为b,便值函数为
 
 
 
3⃣️损失函数 loss function
通过神经网络解决多酚类问题最常用的方法是设置n个输出节点,其中n为类别的个数。
对于每一个样例,神经网络都可以得到一个n维数组作为输出结果。
对于一个样本属于类别K,那么其所对应的输出值为1,其他的输出值为0,以识别数字1为例,神经网络模型的输出结果
越接近[0,1,0,0,0,0,0,0,0,0]越好。
 
那么如何判断输出向量与期望向量有多接近呢?交叉熵cross-entropy是常用的评判法之一。
 
交叉熵刻画的是两个概率分布之间的距离。
交叉熵刻画的是两个概率分布之间的距离,但是Tensorflow的输出层不一定满足概率分布,这就引入了softmax()函数,
输出层经过softmax()处理后就满足了概率分布。
 
交叉熵值越小,两个概率分布越接近。
 
4⃣️交叉熵举例说明
 
 
5⃣️
上述的交叉熵损失函数是对于分类问题的,对于回归问题的损失函数,
 可以使用均方误差(MSE,mean squared error)
其中y代表神经网络的输出结果,y_代表了真是结果。
 
6⃣️自定义损失函数
以上介绍了分类问题的损失函数:交叉熵,回归问题的损失函数:均方差
下边介绍自定义损失函数。
 
7.神经网络优化算法
通过反向传播算法back-propagation和梯度下降算法gradient-decent调整神经网络中参数的取值。
 
梯度下降算法主要用于优化单个参数的取值,而反向传播算法给出了一个高效的方式在所有参数是上使用梯度下降算法。
 
反向传播算法是训练神经网络的核心算法,它可以根据定义好的损失函数优化神经网络中参数的取值,从而使神经网络模型在
训练数据集上的损失函数达到一个较小值。
神经网络模型中参数的优化过程直接决定了模型的质量。
 
 
8.梯度下降算法
 
 
梯度上升算法可以获得较小值,是由当损失函数是凸函数时,才能得到全剧最优解,否则很可能得到的是局部最小值。
梯度上升算法每次运算都要遍历整个数据集,计算繁琐,可以升级为随机梯度上升算法,随机梯度上升算法每次优化的
只是一条数据上的损失函数。所以即是时非凸函数,随机梯度上升算法得到的也有可能是全局最小值。
 
9,神经网络的进一步优化
第一:学习率的设置
学习率是控制参数更新的速度,也是控制参数每次更新的幅度。当学习率过大时,肯能导致参数在极值两侧来回摆动。
为了解决这个问题,Tensorflow提供了一种更加灵活的学习率设置方法——指数衰减法t。tf.train.exponential_decay()
通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续减小学习率,使得模型在训练
后期更加稳定。
代码实现为:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/test20171211/p/9033696.html