Tensorflow基本知识 与使用卷积神经网络打造图像识别应用步骤

Tensorflow 基础介绍:

机器学习框架:
Tensorflow、Caffe、Torch、MXNet 考虑(开发语言、并行计算、分布式训练、语言模型、模型部署、高层封装)
slim API:  提供好的数据集去跑分,图片分类
slim: 数据集、多机多卡加速训练(数据同步、并行计算)、模型
download_and_convert_data.py: 下载和转换数据
train_image_classifier.py:数据训练
eval_image_classifier.py: 训练情况 (验证)
export_interference_graph.py: 训练的可以用了 (导出)

卷积神经网络:
卷积convolution 激活函数activation 池化pooling 批归一化batch  normalization Dropout  (VGG模型)
卷积:  
卷积的计算方式 : 
      公开课:http://deeplearning.stanford.edu/wiki/index.php/卷积特征提取
      特性:局部相关性(数据和周围的数据关系十分紧密)中心感受引
激活函数:
      公开课:https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit
     非线性特征的能力 不能等比例的增长的--非线性的扭曲
池化:
池化的计算方式:http://deeplearning.standord.edu/wiki/index.php/池化
      临近的像素点通过某种运算变成一个像素点
      缩化--信息保留--平移不变性
批归一化:
批归一化计算方式:http://blog.csdn.net/shuzfan/article/details/50723877
      梯度弥散问题--数据重新规整
      加速训练,尽快收敛
Dropout:
Dropout计算方式:https://zhuanlan.zhihu.com/p/21560667
      增大随机扰动、减少过拟合、可能使收敛变慢
      冻结一部分神经元(缺一堂课)-- 自己去学习,减少过拟合--收敛慢

优秀的模型分析:
AlexNet:  结构清晰简单,五层卷积,一层一层叠加  细段
VGG:结构简单清晰,简单深度结构的最后一个网络,预训练权重应用广泛,深度学习成为了主流方向 细、长
ResNet(152层 1001层网络): 超越了深度的极限,残差传递结构,Block结构,跳接和堆叠  又细又长
Inception: 也许是最优秀的模型,1x1卷积--Branch结构--非对称卷积--凹凸有致
DenseNet: 大杂烩, 1x1 bottleneck--Block+Branch--可扩展的设计-- 数据流经网络的时候可能选择路径的多少 来判断模型

如何训练自己的模型:
①数据准备(需要修改代码)
②模型训练
③启动训练
④过程监控(调参:Dropout比例、网络的结构)
⑤结果评估(需要修改代码)
⑥上线测试(需要修改代码)

(1)Tensorflow 使用TFRecord生成数据 
           _NUM_VALIDATION:验证 设的数目通常是总图片的10%
           _NUM_SHARDS:分成几个record文件

(2)模型选择:
收敛速度: VGG>Inception>DenseNet>ResNet
泛化能力: Inception~DenseNet~ResNet>VGG
运算量:    Inception<DenseNet<ResNet<VGG
内存开销: Inception<ResNet<DenseNet<VGG
下载预训练模型:Inception V4

(3)启动训练:
-dataset_name
-model_name
-checkpoint_exclude_scopes
-trainable_scopes (固化其他层、只训练最后一层)
-dataset_dir
-checkpoint_path(绝对路径)
-train_dir
-learning_rate
-batch_size

(4)过程监控:
TensorBoard: 主要监控Loss、Global_step和batch
启动命令: tensorboard --logindir=/tmp/my_train

(5)结果评估:
用训练集和验证机验证  --将训练集和测试集输出到不同的子目录中 
                                  --注意测试集的走势
验证集比训练集低一些,趋势可能间距拉大 
如果训练集往上,验证集往下说明开始过拟合了

(6)测试和上线:
导出模型   export 修改代码取得预处理函数(缩放到-1.0-1.0之间)
精简模型
使用模型   TF自带的classify_image.py
利用Flask做一个简单的API和Web界面    最直观的方式 WebServer(例如植物识别的应用)

(7)生产环境的使用
  Tensorflow Serving -->导出模型  -->执行Serving  --> 执行Client

数据准备-->训练-->验证 -->使用(预测)slim完全没提供的是 预测

相关的问题:
需要多少照片才能训练自己的模型?
  --每种>20,图片总数和参数数量有关
照片都有什么要求?
  --贴近实际使用场景为好
分辨率是不是固定的?
  --对于图像分类、通常使用全连接分类器,会限制输入分辨率
测试时发现识别不准确怎么办?
  --增加Dropout
  --增大1.2惩罚
图像分类有什么局限?
  --硬按一个分类
  --同图多物体会有问题
怎么能加快速度?
  --CPU不要用pip安装,使用自行编译的安装包
  --即使用GPU训练,也减少CPU和磁盘的开销

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值