JavaShuo
栏目
标签
《TensorFlow实战》读书笔记(完结)
时间 2019-12-09
标签
TensorFlow实战
读书
笔记
完结
繁體版
原文
原文链接
1 TensorFlow基础
---1.1TensorFlow概要
TensorFlow使用数据流图进行计算,一次编写,各处运行.
---1.2 TensorFlow编程模型简介
TensorFlow中的
计算
是一个
有向图
,每个
运算操做
都是一个
节点
.每个节点能够有
任意多个输入和输出
,在计算图的边中
流动(flow)
的数据被称为张量
(tensor)
.
一个
运算操做
表明了一种类型的
抽象运算
,运算操做的全部属性必须被
预先设置
,或者能在建立计算图时被
推断
出来.
Variable为变量
,在建立时赋值,它能够将tensor储存在内存或显存中.
placeholder为形参
,能够在计算图中赋值.
Session
是
交互接口
,经过Run方法能够执行计算图,TensorFlow会自动寻找全部须要计算的节点并按依赖顺序执行它们.
TensorFlow能够根据链式法则
自行计算梯度
,从而实现
反向传播
.
在使用高阶语言的
控制流
时,它们会被
自动编译
为TensorFlow的原生控制流.
2 TensorFlow和其余深度学习框架的对比(略)
3 TensorFlow第一步
---3.1 TensorFlow的编译及安装(略)
---3.2 TensorFlow实现Softmax Regression识别手写数字
从TensorFlow自动导入MNIST数据集失败的话能够手动下载.
多分类任务最后一层一般使用
Softmax
,用于计算某个类的几率分布.而损失函数则选用
交叉熵
.
TensorFlow算法
设计的核心步骤
是:
定义算法公式,也就是前向计算
定义loss,选定优化器,而且指定优化器优化loss
迭代地对数据进行训练
在测试集或验证集上对准确率进行评测
4 TensorFlow实现自编码器及多层感知机
---4.1 自编码器简介
使用
少许的基本特征组合
能够获得更高层抽象的特征,因此须要多层神经网络.
自编码器就是用
自身的稀疏的高阶特征编码本身
,输入节点和输出节点是一致的,所以须要加入几种限制以防单纯地复制:
减小中间隐含层节点的数量
,并使用
L1正则化控制稀疏程度
给数据加入
噪声(如高斯噪声)
.
经过自编码器和监督学习的结合,能够解决
梯度弥散
问题,训练深层网络.也能够利用学习到的高阶特征来实现降维.
---4.2 TensorFlow实现自编码器
使用的是
Xaiver初始化
,它会根据某一层网络的输入和输出节点自动调整最合适的分布,也就是让权重知足均值为0,方差为2/(nin+nout).可使用tf.random_uniform建立一个
(-sqrt(6/(nin+nout)),sqrt(6/(nin+nout)))
的均匀分布来实现.
将输入数据加上噪声,而后与权重w1相乘后加上偏置b1,再通过激活函数处理后获得隐含层的结果.将隐含层的结果与权重w2相乘后加上偏置b2就获得了输出.
损失函数选用
平方偏差
.
训练前先对数据进行标准化处理,须要
先在训练集上fit出一个scaler
,而后将它用到训练和测试数据上.
去噪自编码器的实现和一个单隐含层的神经网络差很少,只不过在数据输入时作了标准化,并加上了高斯噪声,同时输出结果是复原的数据而非分类结果.
---4.3 多层感知机简介
Dropout
是在训练时将神经网络某一层的输出节点数据
随机丢弃一部分(训练时小于1,预测时等于1)
,这等于
创造出了不少新的随机样本
,也算是一种bagging.
ReLU
解决了Sigmoid的
梯度弥散
问题,FCN和CNN的隐含层通常都使用ReLU及其变种,可是输出层通常仍是使用接近几率输出分布的Sigmoid.主要变化是:
单侧抑制
相对宽阔的兴奋边界
稀疏激活性
---4.4 TensorFlow实现多层感知机
ReLU层
的
权重
能够用
截断正态分布
进行初始化,
偏置
能够用一些
小的非零值
来初始化以
避免dead neuron
.
Sigmoid层
的
权重
和
偏置
则都初始化为
0
便可.
使用ReLU做为隐藏层,并添加dropout,就实现了多层感知机.
5 TensorFlow实现卷积神经网络
---5.1 卷积神经网络简介
CNN最初是为解决图像识别等问题而设计的,由于
图像特征难以人工提取
.
CNN能够
利用空间结构关系减小须要学习的参数
,从而
提升反向传播的效率
.
CNN的一个卷积层一般都进行如下操做:
经过卷积核的
滤波并添加偏置
,提取出局部特征.
将滤波输出结果进行
非线性激活函数处理
(如ReLU).
对激活函数的结果进行
池化操做
(如最大池化).
能够再加上
BN层
或
LRN层
.
CNN通常由
多个卷积层
构成,每一个卷积层能够对应多个卷积核,每一个卷积核的输出图像对应一种图片特征.单个卷积核是
权值共享
的.
局部链接
和
权值共享下降了参数量
,赋予了CNN对
平移的容忍性
,
池化层降采样
进一步降
低了参数量
,赋予了对
轻度形变的容忍性
,提升了泛化能力.
---5.2 TensorFlow实现简单的卷积网络
激活函数选用ReLU,因此使用截断的正态分布初始化权重来打破彻底对称,使用小的正值(0.1)来初始化偏置以免死亡节点.
两个卷积层,一个全链接层,一个Dropout层和一个Softmax层的CNN在MNIST上的准确率已经达到了99.8%.
---5.3 TensorFlow实现进阶的卷积网络
CIFAR-10是一个经典的图像数据集,包含60000张32*32的彩色图片,训练集50000张,测试集10000张.这里按书下载数据集时出现了一些问题,因而手动将cifar10.py和cifar10_input.py移到了notebook的根目录下,而且在运行时添加如下代码:
tf.app.flags.DEFINE_string(
'
f
'
,
''
,
'
kernel
'
)
在这个CNN中使用了新的技巧:
对权重进行
L2正则化
,用于惩罚特征权重.
对图片进行翻转,随机剪切等
数据加强
,制造更多样本
在每一个卷积-最大池化层后面使用了
LRN层(如今通常用BN层替代)
,加强模型的泛化能力.
设计CNN主要就是安排
卷积层,池化层,全链接层的分布和顺序
,以及它们的超参数和Trick的使用.
深度学习的特色就是
数据量越大效果越好
,这与通常的机器学习模型不一样.
6 TensorFlow实现经典卷积神经网络
---6.1 TensorFlow实现AlexNet
AlexNet的新技术点:
ReLU做为激活函数,解决了Sigmoid在网络较深时的梯度弥散问题
Dropout随机忽略一部分神经元,避免过拟合
重叠的最大池化
LRN层
CUDA加速深度卷积网络的训练
数据加强,截取原始图像的部分增长训练数据量,预测时提取图片的四个角和中间位置,并进行左右翻转,对10个图片预测并求均值.
---6.2 TensorFlow实现VGGNet
VGGNet所有使用3*3的卷积核和2*2的池化核,经过不断加深网络结构来提高性能.两个3*3的卷积核
串联
至关于1个5*5的卷积核,并且有
更多的非线性变换
.
在预测时使用
滑窗
的方式进行平均预测,在训练时将原始图像
缩放到不一样尺寸再随机裁切
来增长数据量.
VGGNet放弃了LRN层,经过多段卷积网络将图像变长缩小,卷积输出通道增长.
---6.3 TensorFlow实现Google Inception Net
Inception V1去除了最后的全链接层,用
全局平均池化层
代替.
采用
Inception Module
结构,其中有4个分支:第一个分支是1*1卷积,第二个分支是1*1卷积链接3*3卷积,第三个分支是1*1卷积链接5*5卷积,第四个分支是3*3最大池化链接1*1卷积.最后经过聚合操做
在输出通道数维度上进行合并
.
靠后
的Inception Module应该捕捉
更高阶的特征
,所以
大面积卷积核的占比会更高
.
1*1卷积的性价比很高,能够跨通道组织信息,并
对输出通道升降维
.同时1*1卷积体现了Hebbian原理,即"一块儿发射的神经元会连在一块儿".
Inception Net有22层深,其中间某一层会做为
辅助分类节点
,按一个小权重加到最终分类结果中.
Inception V2
用两个3*3的卷积代替5*5的卷积
,并使用
BN层
,对每个mini-batch数据进行标准化处理.BN某种意义上起到了
正则化
的做用,因此能够
减小或取消Dropout和L2正则
,简化网络结构.
Inception V3采用
Factorization into small convolutions
思想,
将一个较大的二维卷积拆成两个较小的一维卷积
(如3*3卷积拆成3*1卷积和1*3卷积),节约了参数并减轻了过拟合.还优化了Inception Module的结构.
卷积网络从输入到输出,应该让
图片尺寸逐渐减少
,
输出通道数逐渐增长
,即将空间结构简化,将空间信息转化为高阶抽象的特征信息.
---6.4 TensorFlow实现ResNet
ResNet的
残差学习单元(Residual Unit)
再也不学习一个完整的输出H(x),而是
学习残差
H(x)-x.ResNet有不少支线将输入直接连到后面的层,使得后面的层能够直接学习残差,这种结构被称为
shortcut
.
两层
的残差学习单元包含两个相同输出通道数的3x3卷积,
三层
的残差学习单元则是1x1卷积,3x3卷积,1x1卷积,而且先降维再升维.
7 TensorFlow实现循环神经网络及Word2Vec
---7.1 TensorFlow实现Word2Vec
Word2Vec是一个
将语言中的字词转化为向量形式表达的模型
.
One-Hot编码
的问题是
对特征的编码是随机的
,没有考虑字词间的关系.而且
稀疏数据的训练效率较低
.
向量空间模型
假设在相同语境中出现的词的语义也相近,分为
计数模型
(统计在语料库中相邻出现的词的频率)和
预测模型
(根据一个词周围的词推测出这个词).
Word2Vec就是一种很是高效的预测模型,分为CBOW(Continuous Bag of Words,从原始语句推测目标词句)和
Skip-Gram(从目标字词推测原始语句)
.
CBOW
训练一个
二元的分类模型
来区分真实的目标词汇和编造的词汇(噪声)两类.当模型预测真实的目标词汇为高几率时,学习目标就被最优化了.使用编造的噪声词汇训练的方法叫
Negative Sampling
,只须要计算随机选择的k个词汇,所以训练速度很快.对应的损失函数是
Noise-Contrastive Estimation Loss
.
Skip-Gram须要先构造一个语境与目标词汇的映射关系,即为
选定单词左边和右边滑窗尺寸数量的词汇
.由于它是从目标词汇预测出语境,因此数据集就是(目标词汇,相邻单词).
---7.2 TensorFlow实现基于LSTM的语言模型
RNN的特色是神经元的某些输出可做为输入再次传输到神经元中.但RNN难以记忆间隔太远的信息.LSTM解决了这个问题.
相关文章
1.
《TensorFlow实战》读书笔记
2.
《TensorFlow实战》第一章-TensorFlow基础读书笔记
3.
《Java8实战》读书笔记
4.
k8s实战读书笔记
5.
Maven实战读书笔记
6.
《MongoDB实战》读书笔记
7.
SpringBoot实战读书笔记
8.
读书笔记------《Spring实战》
9.
读书笔记--《Flutter实战》
10.
Spring4实战读书笔记
更多相关文章...
•
PHP 完整表单实例
-
PHP教程
•
Eclipse 添加书签
-
Eclipse 教程
•
Tomcat学习笔记(史上最全tomcat学习笔记)
•
JDK13 GA发布:5大特性解读
相关标签/搜索
TensorFlow实战笔记
读书笔记
FSFA 读书笔记
MySQL 读书笔记
Nginx读书笔记
TensorFlow实战
读完
阅读笔记
实战总结
完结
红包项目实战
MyBatis教程
Redis教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
在windows下的虚拟机中,安装华为电脑的deepin操作系统
2.
强烈推荐款下载不限速解析神器
3.
【区块链技术】孙宇晨:区块链技术带来金融服务的信任变革
4.
搜索引起的链接分析-计算网页的重要性
5.
TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
6.
《数字孪生体技术白皮书》重磅发布(附完整版下载)
7.
双十一“避坑”指南:区块链电子合同为电商交易保驾护航!
8.
区块链产业,怎样“链”住未来?
9.
OpenglRipper使用教程
10.
springcloud请求一次好用一次不好用zuul Name or service not known
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
《TensorFlow实战》读书笔记
2.
《TensorFlow实战》第一章-TensorFlow基础读书笔记
3.
《Java8实战》读书笔记
4.
k8s实战读书笔记
5.
Maven实战读书笔记
6.
《MongoDB实战》读书笔记
7.
SpringBoot实战读书笔记
8.
读书笔记------《Spring实战》
9.
读书笔记--《Flutter实战》
10.
Spring4实战读书笔记
>>更多相关文章<<