Tensorflow【实战Google深度学习框架】用卷积神经网络打造图片识别应用

1 Tensorflow model

https://github.com/tensorflow/models
Slim框架的图像识别代码体系
在这里插入图片描述

https://github.com/tensorflow/models/tree/master/slim

在这里插入图片描述
用什么模型取决于你自己的需求。

2 卷积神经网络的基础单元

在这里插入图片描述

2.1 卷积

卷积的计算方式 http://deeplearning.stanford.edu/wiki/index.php/卷积特征提取
• 卷积核与通道、分辨率的关系 – 每个卷积核覆盖全部输入通道 – 每个卷积核的结果成为输出的一个通道 – 根据padding,改变或者不改变数据的分辨率
• 卷积的作用和设计思路 – 滤波(kernal-size,stride) – 局部相关性(kernal-size) – 中心感受野(padding,stride)
分析一个个像素的关系,通过多层卷积找到他们之间的关系。

2.2 激活函数

激活函数 https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit
• 激活函数的作用和设计思路 – 非线性扭曲
• 常见激活函数 – Sigmoid – ReLU/PReLU/SeLu – Tanh
提供模型的非线性能力,现实生活中大部分事物不是线性关系的
在这里插入图片描述

2.3 池化

池化的计算方式 http://deeplearning.stanford.edu/wiki/index.php/池化
• 池化与通道、分辨率的关系 – 覆盖所有通道,但不改变通道的数量 – 降低分辨率,减少信息
• 池化的作用和设计思路 – 信息保留(avg_pool)与过滤(max_pool) – 平移不变性(stride)
减小预算量,虽然丢失一些图片信息。

2.4 批归一化

批归一化的计算方式 http://blog.csdn.net/shuzfan/article/details/50723877
• 批归一化的作用和设计思路
– 0均值与单位方差
– 加速训练和收敛 • 对应的激活函数 – Sigmoid – ReLU
• 替代方案——SeLU(ArXiv:1706.02515)
规范过程,比如说整理方队

2.5 Dropout

Dropout的计算方式 https://zhuanlan.zhihu.com/p/21560667
• Dropout的作用和设计思路
– 增大随机扰动(Dropout rate)
– 减少过拟合
– 可能会使收敛变慢
泛化过程

3 主流的25个深度学习模型

1、 Feed forward neural networks (FF or FFNN) and perceptrons §

前馈神经网络和感知机,信息从前(输入)往后(输出)流动,一般用反向传播(BP)来训练。算是一种监督学习。

2、Radial basis function (RBF)

径向基函数网络,是一种径向基函数作为激活函数的FFNNs(前馈神经网络)。

3、 Hopfield network (HN)

Hopfield网络,是一种每个神经元都跟其它神经元相连接的神经网络。

4、 Markov chains (MC or discrete time Markov Chain, DTMC)

马尔可夫链 或离散时间马尔可夫链,算是BMs和HNs的雏形。

5、 Boltzmann machines (BM)

玻尔兹曼机,和Hopfield网络很类似,但是:一些神经元作为输入神经元,剩余的是隐藏层。

6、Restricted Boltzmann machines (RBM)

受限玻尔兹曼机,和玻尔兹曼机 以及 Hopfield网络 都比较类似。

7、 Autoencoders (AE)

自动编码,和FFNN有些类似,它更像是FFNN的另一种用法,而不是本质上完全不同的另一种架构。

8、Sparse autoencoders (SAE)

稀疏自动编码,跟自动编码在某种程度比较相反。

9、 Variational autoencoders (VAE)

变分自动编码,和AE架构相似,不同的是:输入样本的一个近似概率分布。这使得它跟BM、RBM更相近。

10、 Denoising autoencoders (DAE)

去噪自动编码,也是一种自编码机,它不仅需要训练数据,还需要带噪音的训练数据。

11 Deep belief networks (DBN

深度信念网络,由多个受限玻尔兹曼机或变分自动编码堆砌而成。

12 Convolutional neural networks (CNN or deep convolutional neural networks, DCNN)

卷积神经网络,这个不解释也都知道。

13 Deconvolutional networks (DN)

去卷积网络,又叫逆图形网络,是一种逆向的卷积神经网络。

14 Deep convolutional inverse graphics networks (DCIGN)

深度卷积逆向图网络,实际上是VAE,且分别用CNN、DNN来作编码和解码。

15 Generative adversarial networks (GAN)

生成对抗网络,Goodfellow的封神之作,这个模型不用解释也都知道。

16 Recurrent neural networks (RNN)

循环神经网络,这个更不用解释,做语音、NLP的没有人不知道,甚至非AI相关人员也知道。

17 Long / short term memory (LSTM)

长短期记忆网络, RNN的变种,解决梯度消失/爆炸的问题,也不用解释,这几年刷爆各大顶会。

18 Gated recurrent units (GRU)

门循环单元,类似LSTM的定位,算是LSTM的简化版。

19 Neural Turing machines (NTM)

神经图灵机,LSTM的抽象,以窥探LSTM的内部细节。具有读取、写入、修改状态的能力。

20 Bidirectional recurrent neural networks, bidirectional long / short term memory networks and bidirectional gated recurrent units (BiRNN, BiLSTM and BiGRU respectively)

双向循环神经网络、双向长短期记忆网络和双向门控循环单元,把RNN、双向的LSTM、GRU双向,不再只是从左到右,而是既有从左到右又有从右到左。

21 Deep residual networks (DRN)

深度残差网络,是非常深的FFNN,它可以把信息从某一层传至后面几层(通常2-5层)。

22 Echo state networks (ESN)

回声状态网络,是另一种不同类型的(循环)网络。

23 Extreme learning machines (ELM)

极限学习机,本质上是随机连接的FFNN。

24 Liquid state machines (LSM)

液态机,跟ESN类似,区别是用阈值激活函数取代了sigmoid激活函数。

2.25 Kohonen networks (KN, also self organising (feature) map, SOM, SOFM)

Kohonen 网络,也称之为自组织(特征)映射。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 训练自己的模型(图像识别引擎)

• 数据准备(需要修改代码)
 • 模型选择 
 • 启动训练 
 • 过程监控 
 • 结果评估(需要修改代码)
  • 上线测试(需要修改代码)

数据准备
TFRecord介绍 https://www.tensorflow.org/api_guides/python/python_io#tfrecords_format_details
• 生成工具 https://github.com/tensorflow/models/blob/master/slim/download_and_convert_dat a.py
• 我们的工作 – 生成TFRecord – 创建自己的数据源
在这里插入图片描述
注意事项
– 创建tfrecord时需要根据自己的数据修改:
datasets/download_and_convert_flowers.py:
L43、L49:
_NUM_VALIDATION = 350 #验证集 数据集十分之一
_NUM_SHARDS = 5 #把数据集分成2个 record文件 一般每一个1000左右
L83: flower_root= os.path.join(dataset_dir, ‘flower_photos’) #这原来默认是从网上下载压缩包命名,现在应该改成自己目录的名字 my_data
L190: dataset_utils.download_and_uncompress_tarball(_DATA_URL, dataset_dir) #不下载网上的就注释掉
L210: _clean_up_temporary_files(dataset_dir) # 注释掉 会删掉你自己的数据集
– 记录下它提示的数值 >> Converting image 1650/1650 shard 1 >> Converting image 180/180 shard 1 将上述数值填入datasets/flowers.py的L34处
– 修改flowers数据源,修改L35的数据数量,及L37的_NUM_CLASSES为你的数据的分类 – 如果标签是中文,别忘了在datasets/dataset_utils.py中追加sys.setdefaultencoding(“utf-8”)

运行脚本:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了877 篇原创文章 · 获赞 237 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104790112