点击上方“程序人生”,选择“置顶公众号”
第一时间关注程序猿(媛)身边的故事
图片源自unsplash
作者
Jack Yang
如需转载,请联系原作者授权。
本文大致脉络:
读书笔记的自我说明
对读书笔记的摘要
具体章节的摘要:
第一章 深度学习简介
第二章 TensorFlow环境搭建
第三章 TensorFlow入门
第四章 深层神经网络
第五章 MNIST 数字识别问题
第六章 图像识别和卷积神经网络
第七章 图像数据处理
第八章 循环神经网络 Recurrent Neural Network
第九章 TensorBoard可视化
第十章 TensorFlow计算加速
读书笔记的自我说明
《TensorFlow实战Google深度学习框架》读书笔记
读书笔记目的是把书读薄,每次看完一本书的半年后,对这本书的印象基本只剩零星的概念。
如果有了读书笔记,可以用半小时重读这本书,也可以搜索关键字,然后快速翻到书中的对应地方,方便查找知识点,我的一种学习方法~
具体方法:我会先看一章,把最核心的几句话勾出来,用这几句话回想整个章节内容,把他们默写到电脑里,想不起来看看书,继续默写。
#特殊符号:0 参数;J(0) + λR(w)
#完整代码:说明那个地方有代码,需要后期重新码一遍
#图:说明有重要的结构图
对读书笔记的摘要
构造一个深度学习系统需要的知识点总结:(对读书笔记的再次提炼)
神经元:多个输入,一个输出,输入可以是整个神经网络的输入,也可以是其他多个神经元的输出。输出就是所有输入的加权和。
不同输入的权重就是我们要调节的参数
M-P神经元模型:一个神经元接收到来自其他神经元的输入信号,每个输入信号都有各自权重,神经元接受的总输入值和阈值进行比较,
然后经过激活函数的处理得到输出。激活函数是Sigmoid函数。神经网络就是由无数个这样的神经元组成。
全连接层:相邻两层任意两个节点之间都有连接
节点:神经元
参数:W,权重,W上部数字代表神经网络所在的层数,下面数字:连接左右节点编号
输出:输入的加权和。;
前向传播算法:无数个加权和的过程通过矩阵乘法来完成
使用监督学习方式设置参数取值,设置参数过程就是调节神经网络的训练过程
神经网络优化算法:反向传播算法,backpropagation;实现了迭代的过程;有上百万轮迭代;会不断更新参数取值
损失函数:刻画当前预测值和真实值之间的差距,比如:交叉熵(cross entropy)
激活函数实现去线性化
神经网络结果加上激活函数和偏置项bias:f(Wx +b); f(x)是激活函数,b是偏置项
每个神经元的输出经过非线性函数,整个模型就不是非线性了。这个非线性函数就是激活函数。
三个常见激活函数:ReLU激活函数,Sigmoid激活函数,tanh函数;
交叉熵(cross entropy)损失函数判断两个概率分布之间的距离,判定实际的输出与期望的输出的接近程度。也可以用来判断多分类问题
Softmax回归把前向传播算法得到的结果变成了概率分布;称作Softmax层,位于最终输出层之前,原始输出层之前。
分类问题用的损失函数:交叉熵
回归问题常用的损失函数是均方误差MSE:mean squared error
反向传播法和梯度下降法调整神经网络中参数的取值。
梯度下降优化单个参数,反向传播算法在所有参数上使用梯度优化算法。
0 : 参数;J(0):损失函数
优化目标:寻找0,让 J(0)最小。
梯度下降法迭代更新参数 0,沿着梯度的反方向让参数朝着总损失更小的方向移动。
梯度通过求偏导数计算
学习率定义每次参数更新幅度
损失函数为凸函数保证梯度下降达到最优解。
梯度下降缺点:计算时间太长;
随机梯度下降SGD:stochastic gradient descent加速训练过程:随机优化某一条训练数据上的损失函数
过拟合:模型过分复杂,对训练数据拟合的很好,对预测数据表现很差
正则化:避免过拟合的方法;思想:在损失函数中加入刻画模型复杂度的指标,防止模型过度模拟训练数据中的随机噪音,
优化目标:J(0) + λR(w) ;λ表示模型复杂损失在总损失中的比重,类似权重;
L1正则化:求绝对值和,让参数更稀疏:更多参数变为0;正则化计算公式不可导;
L2正则化:这里知识和以前概念有问题。正则化计算公式可导;
滑动平均模型让最终模型更加健壮
具体章节的摘要:
第一章 深度学习简介
略过,因为我看过6本人工智能的书,已经知道了这些知识,跳过这章,加快学习进度
第二章 TensorFlow环境搭建
因为我电脑已经装好了,跳过这章
第三章 TensorFlow入门
三个模型:计算模型,数据模型,运行模型
3.1 TensorFlow计算模型--计算图
所有计算转化为计算图上的节点
3.1.1 计算图的概念
TensorFlow中,张量被简单理解为数组,每一个计算都是计算图中的一个节点。图中节点之间的边描述了计算之间的依赖关系。
节点:运算;边:依赖关系;
3.1.2 计算图的使用
两个阶段:定义计算阶段和执行计算阶段
tf.get_default_graph函数获取当前默认计算图
tf.Graph函数生成新的计算图
tf.Graph.device指定运行计算设备
tf.add_to_collection函数把资源加入到一个或者多个集合中
tf.get_collection函数获取一个集合里面的所有资源。
3.2 数据模型 --张量
所有数据通过张量形式表现出来。张量就是数组,0阶张量就是数字,1阶张量是向量,也就是一维数组;n阶张量就是n维数组
张量没有保存数字,保存三个属性:名字,维度,类型
3.2.2 张量的使用
两类:1 对中间计算结果的引用,中间结果可以赋值给一个字母2:获得计算结果。会话session得到具体数字
3.3 运行模型--会话
会话session执行定义好的运算
tf.InteractiveSession函数在交互式环境下构建默认会话函数
3.4 TensorFlow实现神经网络
3.4.1 TensorFlow游乐场及神经网络简介
游乐场包含:数据集,输入值,隐含层,输出层,学习率,激活函数,正则化,正则化率,问题种类。
举例:零件二分类问题;
灰色:合格;黑色:不合格。零件的判断就变成了区分点的颜色
特征提取:零件变成平面上的点,点的横纵坐标表示零件长度和质量
特征向量:描述实体的数字的组合,比如(长度,质量)(X1,X2)
神经网络包括:输入层,隐藏层,输出层
输入层:代表特征向量中每个特征的取值,
隐藏层:输入层和输出层之间的都是隐藏层,可以由多个隐藏层。
输出层:输出层得到计算结果;输出值和阈值比较,大于零:合格,小于零:不合格
特点:同一层不会相互连接,每一层只和下一层连接。
训练结果分析:
小格子代表一个神经网络节点,边代表节点之间的连线。
边:参数;神经网络就是调节合适的参数解决分类回归问题。边颜色越深,参数绝对值越大
节点颜色:节点的区分平面;平面每个点代表了(x1,x2)的一种取值。颜色越深,输出值绝对值越大
神经网络解决分类问题的步骤:
1 提取问题中实体,比如零件的特征向量作为神经网络输入
2 定义神经网络的结构,定义如何从输入得到输出。如 3.4.2
3 通过训练数据来调整参数,(得到合适的参数是我们的目的)
4 训练好的神经网络预测未知数据
3.4.2 前向传播算法
神经元模型
权重:每个东西的分量,被重视的程度
阈值:类似警戒线,超过了就会有什么结果发生。
M-P神经元模型:一个神经元接收到来自其他神经元的输入信号,每个输入信号都有各自权重,神经元接受的总输入值和阈值进行比较,
然后经过激活函数的处理得到输出。激活函数是Sigmoid函数。神经网络就是由无数个这样的神经元组成。
神经元:多个输入,一个输出,输入可以是整个神经网络的输入,也可以是其他多个神经元的输出。输出就是所有输入的加权和。
不同输入的权重就是我们要调节的参数
全连接层:相邻两层任意两个节点之间都有连接
节点:神经元
参数:W,权重,W上部数字代表神经网络所在的层数,下面数字:连接左右节点编号
输出:输入的加权和。;
前向传播算法:无数个加权和的过程通过矩阵乘法来完成代码:
a = tf.matmul(x, w1) #矩阵相乘
y = tf.matmul(a,w2)
3.4.3 神经网络参数与TensorFlow变量
变量tf.Variable:保存和更新参数
随机数给变量赋初值:weights = tf.Variable(tf.random_normal([2,3], stddev = 2)) #2*3矩阵,均值=0;标准差=2
常数初始化变量:tf.zeros;tf.ones; tf.fill; tf.constant
偏置项bias(bias)初始化:biases = tf.Variable(weights.initialized_value()) #长度为3,初始值为0
tf.initialize_all_variables()初始化所有变量
变量的声明函数tf.Variable()是一个运算,运算的结果是张量。这个张量就是这节课的变量。
tf.all_valiables函数拿到计算图中所有变量
tf.trainable_variables()函数得到所有需要优化的参数。
变量属性:维度,shape;类型type
变量类型一旦确定就不能改变
维度可以随时改变
3.4.4 通过TensorFlow训练神经网络模型
神经网络反向传播优化流程图
使用监督学习方式设置参数取值,设置参数过程就是调节神经网络的训练过程
神经网络优化算法:反向传播算法,backpropagation;实现了迭代的过程;有上百万轮迭代;会不断更新参数取值
batch:(一批)取小部分做测试的数据,batch取值有8
placeholder机制提供输入数据
feed_dict是一个字典,需要给出每一个placeholder的取值,
损失函数:刻画当前预测值和真实值之间的差距,比如:交叉熵(cross entropy)
3.4.5 完整神经网络样例程序
完整代码
训练神经网络的过程:
1 定义神经网络结构和前向传播的输出结果
2 定义损失函数以及选择反向传播的优化算法
3 生成会话(tf.Session)并且在训练数据上反复运行反向传播优化算法。
第四章 深层神经网络
4.1 深度学习与深层神经网络
4.1.1 线性模型的局限性
线性模型中,模型输出为输入的加权和。特点:任意线性模型的组合仍然是线性模型
4.1.2 激活函数实现去线性化
神经网络结果加上激活函数和偏置项:f(Wx +b); f(x)是激活函数,b是偏置项
每个神经元的输出经过非线性函数,整个模型就不是非线性了。这个非线性函数就是激活函数。
三个常见激活函数:ReLU激活函数,Sigmoid激活函数,tanh函数;
4.1.3 多层网络解决异或运算
感知机:单层神经网络,无法模拟异或
加入隐藏层后,解决异或问题
深层神经网络有组合特征提取的功能
4.2 损失函数定义:
神经网络模型的效果和优化的目标是通过损失函数定义的。
4.2.1 经典损失函数 Softmax回归处理:神经网络的原始输出不是一个概率值,实质上只是输入的数值做了复杂的加权和与非线性处理之后的一个值而已,
通过Softmax层把神经网络输出变成一个概率分布图
神经网路解决多分类问题:设置n个输出节点,n是类别的个数。样本有k类,一个类对应输出值为1,其他为0,这样效果最好
交叉熵(cross entropy)损失函数判断两个概率分布之间的距离,判定实际的输出与期望的输出的接近程度。也可以用来判断多分类问题
比如两个概率p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,则:H(p, q) = -p(x)logq(x) 的和;
事件总数是有限的情况下,概率分布p(X =x)满足:0
Softmax回归把前向传播算法得到的结果变成了概率分布;称作Softmax层,位于最终输出层之前,原始输出层之前。
交叉熵值越小,两个概率分布越近,效果越好。代码实现交叉熵:
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, le-10, 1.0)))
y_代表正确结果,y代表预测结果
tf.clip_by_value函数限制张量数值在一个范围内
v1 * v2 :矩阵每个位置对应元素的乘积
tf.matmul函数矩阵乘法运算
分类问题用的损失函数:交叉熵
回归问题解决对数值的预测。常用的损失函数是均方误差MSE:mean squared error,代码:
mse = tf.reduce_mean(tf.square(y_ -y))
4.2.2 自定义损失函数
例子:预测商品销量,代码:loss = tf.reduce_sum(tf.select(tf.greater(v1, v2), (v1 - v2) * a, (v2 - v1)*b))
tf.greater函数比较两个张量的大小; tf.select函数选择第二个参数的值或者第三个值,
相同的神经网络,损失函数不同,训练得到的模型不同。
4.3 神经网络优化算法
反向传播法和梯度下降法调整神经网络中参数的取值。
梯度下降优化单个参数,反向传播算法在所有参数上使用梯度优化算法。
0 : 参数;J(0):损失函数
优化目标:寻找0,让 J(0)最小。
梯度下降法迭代更新参数 0,沿着梯度的反方向让参数朝着总损失更小的方向移动。
梯度通过求偏导数计算
学习率定义每次参数更新幅度
损失函数为凸函数保证梯度下降达到最优解。
梯度下降缺点:计算时间太长;
随机梯度下降SGD:stochastic gradient descent加速训练过程:随机优化某一条训练数据上的损失函数
4.4 神经网络进一步优化
指数衰减的方法设置梯度下降算法的学习率。
滑动平均模型把每一轮迭代得到的模型综合起来,从而使得最终得到的模型更加健壮
4.4.1 学习率的设置
学习率过大,会一直摇摆,太小,需要时间太长;所以学习率不可以过大,也不可以过小
tf.train.exponential_decay函数实现了指数衰减学习率。让学习率先快后慢
参数staircase选择不同的衰减方式;
4.4.2 过拟合问题
过拟合:模型过分复杂,对训练数据拟合的很好,对预测数据表现很差
正则化:避免过拟合的方法;思想:在损失函数中加入刻画模型复杂度的指标,防止模型过度模拟训练数据中的随机噪音,
优化目标:J(0) + λR(w) ;λ表示模型复杂损失在总损失中的比重,类似权重;
L1正则化:求绝对值和,让参数更稀疏:更多参数变为0;正则化计算公式不可导;
L2正则化:这里知识和以前概念有问题。正则化计算公式可导;
4.4.3 滑动平均模型
滑动平均模型让模型在测试数据上更加健壮。
tf.train.ExponentialMovingAverage函数实现滑动平均模型。
shadow_variable函数为影子变量,variable为代更新的变量,decay为衰减率。
第五章 MNIST 数字识别问题
5.1 MNIST数据处理
MNIST是一个手写数字识别数据集。是NIST数据集的子集。包含60000张图片作为训练集, 10000测试集。
图片包含0-9数字,图片大小为28*28
TensorFlow的类会自动下载并且转化MNIST格式。
input_data.read_data_sets函数自动把MNIST里面数据集分为训练,验证,测试部分。处理后的图片是一个784(28*28)的数组。数组取值范围是0-1,代表颜色深浅。
mnist.train.next_batch函数获取一部分数据作为一个训练batch.
5.2 神经网络模型训练及不同模型结果对比
5.2.1 TensorFlow训练神经网络
这里有完整代码,调用了前面所有的方法。
5.2.2 使用验证数据集判断模型效果
如何设置7种不同的参数,比如:初始学习率,学习率的衰减率,隐藏层节点数,迭代轮数;
5.2.3 不同模型效果比较
5.3 变量管理
一个好机制:通过变量名称创建和获取一个变量而不是把变量通过参数形式到处传递。
tf.Variable函数创建变量。
tf.get_variable函数创建或者获取变量
tf.constant函数和tf.constant_initializer函数功能一致:把变量初始化为常数
tf.variable_scope函数生成一个上下文管理器。这个管理器也会创建一个命名空间。
5.4 TensorFlow模型持久化
持久化:重复使用训练得到的模型
5.4.1 持久化代码实现
API:tf.train.Saver类保存还原一个神经网络模型。
模型保存格式:.ckpt,包含三个文件:model.ckpt.meta:保存神经网络结构;model.ckpt保存变量取值;checkpoint保存模型文件列表
加载已经保存的模型:saver.restore函数
直接加载持久化的图:tf.train.import_meta_graph函数
保存或者加载部分变量tf.train.Saver(列表)
通过字典保存或者加载时候给变量重命名tf.train.Saver({},{})
重命名的目的是方便使用变脸的滑动平均值
variable_to_restore函数生成tf.train.Saver类需要的变量重命名字典。
convert_variables_to_constants函数把计算图中的变量保存为常量
5.4.2 持久化原理及数据格式
跳过
5.5 TensorFlow最佳样例实现程序
5.2.1 中的完整程序存在缺点:可扩展性不好;参数更多,可读性差;大量冗余代码;没有持久化模型;程序死机不可控成本;
代码重构:mnist_inference.py 定义前向传播过程以及神经网络中的参数
mnist_train.py定义训练过程
mnist_eval.py定义测试过程
第六章 图像识别和卷积神经网络
Convolutional Neural Network:CNN卷积神经网络
6.1 图像识别问题简介及经典数据集
Cifar数据集,图片32*32彩色图片。图片仅有一个东西。Cifar官网可以下载图片
图像词典项目:Visual Dictionary
斯坦福大学李飞飞整理的ImageNet图像数据库有1500张图片,每张彩色图片里面有各种不同的东西。
框出实体的矩形叫做:bounding box;
图像识别竞赛:ImageNet Large Scale Visual Recognition Challenge,ILSVRC
6.2 卷积神经网络简介
卷积神经网络结构示意图
特点:相邻两层只有部分节点相连,每层卷积层的节点组织成一个三维矩阵。
输入层:图像原始像素;
输出层:节点代表类别可信度
卷积和全连接网络唯一区别就是相邻两层连接方式不同。
全连接层的问题是参数太多。卷积可以大量减少参数数目
卷积神经网络组成:
输入层:图片像素矩阵;每一层结点都是一个三维矩阵;三维矩阵长宽代表图片大小;三维矩阵深度代表图片色彩通道RGB。
卷积层:每个节点输入是上一层神经网络的一部分。比如3*3;5*5卷积层让节点矩阵更深
池化层:不改变三维矩阵深度,只是缩小矩阵大小。图片分辨率降低,缩小全连接层节点个数,减少参数
全连接层:完成分类任务
Softmax层:回归把前向传播算法得到的结果变成了概率分布;位于最终输出层之前,原始输出层之前。
32*32*3表示32*32图片大小,3个RGB色彩通道
6.3 卷积神经网络常用结构
卷积层结构及其前向传播算法;
6.3.1 卷积层
过滤器或者内核:把当前子结点矩阵转化为下一层的单位节点矩阵(长宽为1,深度不限的矩阵)想象成一个长方体,无限长的集装箱。
过滤器把不规则的矩形铸造成了规则矩形。
过滤器尺寸:3*3;5*5;人工设置;指输入节点大小;
过滤器深度:单位矩阵深度;人工设置;指输出节点大小;
过滤器计算:加权和
前向传播过程就是通过左侧小矩阵的节点计算出右侧单位矩阵节点的过程。
卷积层结构的前向传播过程就是通过一个过滤器从当前层的左上角移动到右下角,并且在移动中计算对应的单位矩阵。
全零填充和设置过滤器移动的步长可以调整矩阵的大小。
每一个卷积层中过滤器中的参数都一样
共享卷积层中过滤器的参数可以减少神经网络上的参数,
卷积层参数和图片大小无关,只和过滤器尺寸,深度和当前层节点矩阵的深度有关
6.3.2 池化层
池化层有效缩小矩阵尺寸,减小全连接层参数,加快计算速度,防止过拟合
过滤器计算:平均值运算或者最大值
最大池化层:采用最大值运算
平均池化层:采用平均值运算
过滤器移动和卷积层类似,区别在于,卷积层过滤器是横跨整个深度的。池化层只影响一个深度节点。
6.4 经典卷积网络模型
6.4.1 LeNet-5 模型
不同卷积层是串联的
1998年教授成果,缺点:无法处理类似ImageNet大型数据集,处理手写数字还是可以的。
大部分神经网络过滤器深度都会逐层递增。
1:卷积层
2:池化层
3:卷积层
4:池化层
5:全连接层
6:全连接层
7: 全连接层
完整代码
6.4.2 Inception-v3 模型
卷积层并联。
6.5 卷积神经网络迁移学习
迁移学习:训练好的数据模型简单调整后应用到新的数据集上
6.5.1 迁移学习介绍
随着模型层数和复杂度增加,错误率也会降低。
6.5.2 TensorFlow实现迁移学习
完整代码
第七章 图像数据处理
卷积神经网络给图像识别技术带来了突破性进展
图像预处理可以让模型尽可能小的被无关因素影响
TensorFlow多线程处理输入数据
7.1 TFRecord输入数据格式
TFRecord输入数据格式是TensorFlow中统一的数据格式。
7.1.1 TFRecord格式介绍
tr.train.Example 包含字典
7.1.2 TFRecord 样例程序
7.2 图像数据处理
图像经过预处理,可以尽量避免模型受到无关因素的影响。
7.2.1 TensorFlow图像处理函数
图片还原为三维矩阵,需要解码。
tf.image.resize_image函数调整图像大小
tf.image.resize_image_with_crop_or_pad函数,图片裁剪或者填充
原始图像大于目标图像:进行裁剪
原始图像小于目标图像:原始图像四周用0填充(四周都是黑色)
tf.image.flip_up_down函数上下翻转
tf.image.flip_left_right函数左右翻转
tf.image.transpose_image函数沿着对角线翻转
tf.image.adjust_brightness函数调整图像亮度
tf.image.adjust_contrast函数调整对比度
tf.image.adjust_hue函数调整图像色相
tf.image.adjust_saturation函数调整图像饱和度
tf.image.draw_bounding_boxes函数在图像中添加标注框
tf.image.sample_distorted_bounding_box函数随机截取图像。
7.2.2 图像预处理完整案例
7.3 多线程输入数据处理框架
7.3.1 队列与多线程
队列和变量类似都是计算图上有状态的节点。
Enqueue函数添加元素到队列
enqueue_many函数初始化队列
dequeue函数让队列中的第一个元素出队列
tf.FIFOQueue函数创建先进先出队列
randomShuffleQueue函数把队列中的元素打乱
tf.Coordinator函数和tf.QueueRunner函数完成多线程协同的功能。
tf.QueueRunner函数启动多个线程来操作同一个队列。
7.3.2 输入文件队列
tf.train.string_input_producer函数创建一个输入队列,输入队列中的文件列表为tf.train.match_filenames_noce函数获取的文件列表
7.3.3 组合训练数据
tf.train.batch函数和tf.train.shuffle_batch函数把单个的样例组织成batch的形式输出,也提供了并行化处理输入数据的方法
7.3.4 输入数据处理框架
输入数据处理流程示意图
完整代码
第八章 循环神经网络 Recurrent Neural Network
LSTM:long short-term memory长短时记忆网络
循环神经网络在自然语言处理,机器翻译和时序分析方面应用
8.1 循环神经网络简介
全连接神经网络参数过多,无法利用数据中时间序列信息。每层之间的节点没有连接。
循环神经网络隐藏层内部的节点是有连接的,外部也有连接,隐藏层输入包括输入层输出,还有上一时刻隐藏层的输出。
单个循环神经网络对于每一个时刻的输入结合当前模型状态给出一个输出。
循环神经网络当前状态是由上一时刻状态和当前的输入共同决定的。
循环神经网络要求每个时刻都有输入,但不是每个时刻都有输出。
循环神经网络可以被看做同一个神经网络结构在时间序列上被复制多次的结果。
卷积神经网络过滤器中参数共享,在循环神经网络中,循环体网络结构中的参数在不同时刻也是共享的。
循环神经网络中状态是通过一个向量来表示的,向量维度称为循环神经网络隐藏层的大小。
循环神经网络总损失为所有时刻上的损失函数的总和。
循环神经网络序列过长会导致优化时候出现梯度消散问题。
8.2 长短时记忆网络 LSTM结构
长短时记忆网络用来解决单词对不同语句长度的依赖程度。
LSTM结构有三个门:输入门,输出门,遗忘门
遗忘门:忘记无用信息;忘记没用信息后需要从当前输入补充最新的记忆,这个过程由输入门完成。
门结构就是使用sigmoid神经网络和一个按位做乘法的操作。
门结构让信息有选择性的影响循环神经网络每个时刻的状态。
门打开(输出1):全部信息通过;门关系(输出0):任何信息无法通过。
8.3 循环神经网络变种
8.3.1 双向循环神经网络和深层循环神经网络
双向循环神经网络:当前状态和前后状态都有关。主体结构:两个单向循环神经网络的结合。
深层循环神经网络:每一个时刻上的循环体重复多次。
MultiRNNCell类实现深层循环神经网络的前向传播过程。
8.3.2 循环神经网络的dropout
dropout让卷积神经网络更加健壮也会让循环神经网络更加健壮
卷积神经在最后的全连接层使用dropout,循环神经网络在不同层之间使用dropout,而不在同一层使用dropout
tf.nn.rnn_cell.DropoutWrapper类实现dropout功能。
8.4 循环神经网络样例应用
8.4.1 自然语言建模
语言模型的目的是为了计算一个句子出现的概率
n-gram方法,决策树,最大熵模型,条件随机场,神经网络语言模型都可以进行参数估计。
复杂度:评价语言模型效果好坏,。通过一个语言模型估计一句话出现的概率。
复杂度其实是平均分支系数,即模型预测下一个词时的平均可选择数量。
循环神经网络也可以对自然语言建模。
PTB文本数据集是语言模型学习中最广泛使用的数据集。
使用循环神经网络实现语言模型完整代码
8.4.2 时间序列预测
完整代码预测正弦函数;TFLearn
第九章 TensorBoard可视化
训练神经网络十分复杂,有时候需要几天甚至几周的时间。
9.1 TensorBoard简介
TensorBoard是TensorFlow的可视化工具,它通过TensorFlow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态。
TensorBoard会随着TensorFlow安装被自动安装。
9.2 TensorFlow计算图可视化
TensorBoard可以展示TensorFlow计算图
9.2.1 命名空间与TensorBoard 图上节点
TensorBoard支持通过TensorFlow命名空间来整理可视化效果图上的节点。
除了自动方式,TensorBoard也支持手动调整可视化效果。
9.2.2 节点信息
TensorBoard还可以展示节点信息及运行时候消耗的时间和空间。
9.3 监控指标可视化
TensorBoard可以可视化TensorFlow运行过程中各种有助于了解程序运行状态的监控指标。
第十章 TensorFlow计算加速
没有条件搞多个CPU,GPU,暂时放弃,有需要再看。
以上是我的读书笔记,也是我的学习方法,你的学习方法是怎样的呢?欢迎留言交流。谢谢
- The End -
「若你有原创文章想与大家分享,欢迎投稿。」
加编辑微信ID,备注#投稿#:
程序 丨 druidlost
小七 丨 duoshangshuang
更多精彩内容