tensorflow实战之模型搭建

这一篇将详细讲解现有的tensorflow搭建框架的一些框架,并给出合适的搭建框架的选择建议。估计这也是大家使用tensorflow时的困惑吧,可使用的框架太多,不知道选择那个,选择合适的框架之后能够使得tensorflow搭建更加高效率。


目录

一、Tensorflow版本

1、Tensorflow 1.x版本

2、Tensorflow 2.x版本

二、Tensorflow常见的框架

2.1、单层网络框架的封装

2.2、处理框架的封装

2.3、框架和网络的封装

总结

三、Tensorflow模型分布式训练

3.1、为Tensorflow分配GPU资源

3.2、Tensorflow分布式策略


 

一、Tensorflow版本

1、Tensorflow 1.x版本

在tensorflow 1.x版本中,我们主流的网络运行方式是“静态图”的运行方式,这种运行方式需要将网络的定义和运行分开进行。需要先搭建一个图,然后让数据在图上运行得到最终结果。所以,一般静态图可以分为两步:

  • 构建模型
  • 执行模型

一般在1.x版本中的步骤如下:

  • 定义占位符
  • 构建模型
  • 建立会话(Session)
  • 运行模型

2、Tensorflow 2.x版本

在2.x版本中已经默认采用“动态图”的方式运行,严格来说,在tensorflow 1.3版本之后已经能够实现动态图(eager),到1.11版本时已经比较完善。动态图是在静态图的基础上更加优化,使得Tensorflow更加方便、快捷的使用(感觉还是向Pytorch看齐吧,以前的太难用了)。具体2.x版本有什么特性,这里不多介绍,详细可以看参考链接。所以,在动态图中你可以像使用Python一样使用tensorflow。

2.1、如何在1.x版本使用"动态图"

只需要在1.x版本的最前面加上以下代码:

tf.enable_eager_execution()

注意:必须在程序前面执行,不然会报错。

2.2、如何在2.x版本使用"静态图"

  • 关闭动态图:
tf.compat.v1.disable_v2_behavior()
  • 启用动态图:
tf.compat.v1.enable_v2_behavior()

参考链接:

tensorflow学习笔记: 1.X 和2.X版本的差异

[翻译] 将 TensorFlow 1.X 的代码转换为 TensorFlow 2.0

TensorFlow 2.0 新鲜出炉!新版本,新架构,新特性

二、Tensorflow常见的框架

2.1、单层网络框架的封装

  • tf.layers接口

tf.layers接口主要用于层的开发,如卷积层、池化层等,然后依次将他们连接起来构建卷积神经网络,它是对tf.nn的进一步封装,tf.nn会更底层一些。用tf.layers需要考虑版本移植问题,在2.x版本中,tf.layers需要替换为tf.compat.v1.layers。另外,在2.x版本中tf.layers最主要用于接口底层的开发。

  • TF-slim接口

TF-Slim是Tensorflow中一个轻量级的库,用于定义、训练和评估复杂的模型。TF-Slim中的组件可以与Tensorflow中原生的函数一起使用,与其他的框架,比如与tf.contrib.learn也可以一起使用。

参考链接:TensorFlow-Slim使用方法说明

2.2、处理框架的封装

  • Estimators API(估算器框架接口)

估算器框架接口是tensorflow中的高级API,它提供了整套的训练、预测模型和生成预测的方法。用户在此框架中开发只需实现对应的方法,整体的数据流向搭建由估算器来做。Estimator 有以下优势:

  • 对分布式的良好支持(不需要更改代码)。
  • 有利于模型开发者之间的代码分享。
  • 简化了模型的创建工作。
  • Estimator 建立在 `tf.layers` 上,这简化了自定义 Estimator 的编写。
  • Estimator 会为你创建 graph。
  • Estimator 提供了一个安全的分布式训练环境,其会帮我们控制这么、何时去:建立 graph、初始化 variables、开始 queues、处理 exceptions、创建 checkpoint 文件、从失败中恢复训练、保存 summaries for TensorBoard。

    1. 估算器框架组成

    输入函数:由tf.data.Dataset组成,分为训练输入函数(train_input_fn)和测试输入函数(eval_input_fn);

    模型函数:由tf.layers和tf.metrics组成,用于训练、测试和监控模型参数状况等功能;

    估算器:将个部分组合在一起,控制数据在模型中计算和流动。

    2. 估算器预置模型

    估算器支持一些封装良好的常用模型,如:基于线性回归和分类模型、基于深度神经网络的回归和分类模型。

    3. 基于估算器的高级开发模型

    基于估算器开发的高级模型框架:TFTS和TFGAN。TFTS用于处理序列数据的通用框架,TF-GAN用于处理对抗神经网络的通用     框架。

综上所述,估算器框架估算器的集成化程度比较高,适用于成熟模型的训练和使用,而不适用于模型的调试。

参考链接:TensorFlow Estimator 教程之----快速入门

2.3、框架和网络的封装

  • tf.keras

在2.x版本,tf.keras是tensorfow官方推荐的主流方法之一,使用tf.keras不需要考虑版本移植问题,2.x版本完全兼容1.x版本的。Keras是一个用于构建和训练深度学习模型的高级API。 它用于快速原型设计,高级研究和生产,具有三个主要优点:

  • 用户友好
    Keras具有针对常见用例优化的简单,一致的界面。 它为用户错误提供清晰且可操作的反馈。
  • 模块化和可组合
    Keras模型是通过将可配置的构建块连接在一起而制定的,几乎没有限制。
  • 易于扩展
    编写自定义构建块以表达研究的新想法。 创建新图层,损失函数并开发最先进的模型。

参考链接:TensorFlow Keras 官方教程

  • TFLearn

TFLearn是建立在Tensorflow上的模块化的深度学习框架。这里不详细介绍,大家可以自行百度了解详情(太懒了。。。)。

总结

1、从学习角度分析

从学习角度讲,最好学会原生API,有了这个基础才能更好的学习其他API,对于上述三个层面,最好每一种选择一个了解。这里还是首推tf.keras接口,最好着重掌握。

2、从工程角度分析

推荐使用tf.keras、Estimators、eager这三种框架。这三种是2.x版本所支持的框架,具有很好的技术延展性。在实际开发中,具体使用建议:

  • 在开发调试场景中,推荐使用tf.keras接口搭建模型,并在eager框架中进行训练和调参。动态图具有良好的灵活性和对各各环节的改动;
  • 成熟模型的训练,在模型开发结束之后,可以使用tf.keras接口中的model类集成或将模型代码封装到Estimators框架中,进行训练或评估操作;
  • 对外发布源码的场景中,在公布开源模型或项目交付时,也可以将模型代码封装到Estimators框架中,来对代码进行高度集成,是源码更简洁。

三、Tensorflow模型分布式训练

3.1、为Tensorflow分配GPU资源

  • 为整个程序指定GPU卡

主要通过设置CUDA_VISIBLE_DEVICES来实现。

(1)在程序中设置

import os
os.environ['CUDA_VISIBLE_DEVICES']='0'#代表使用序号为0的卡

(2)在命令行设置

root@user-NULL:~/test#CUDA_VISIBLE_DEVICES=1 python xxx.py

参考链接:tensorflow: CUDA_VISIBLE_DEVICES

  • 为整个程序指定GPU显存

通过tf.ConfigProto类来实现。具体实现细节参考链接。

参考链接:tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定

  • 程序内部指定GPU资源

在代码前使用tf.device语句来实现。

with tf.device("/cpu:0"):    #表示当前代码在第0块cpu上运行

在动态图中也可以用该语句指定硬件资源。此外,还可以通过动态图中的张量gpucpu来指定硬件资源。

3.2、Tensorflow分布式策略

Tensorflow封装的分布式策略应用场景:

  • MirroredStrategy(镜像策略):将计算均匀的分配到每块GPU上,该策略适用于一机多卡的情况;
  • CollectiveAllReduceStrategy(集合规约策略):多台机器训练同一个模型,先将每一台机器采用MirroredStrategy策略进行训练,在将多台机器的结果进行规约合并。适用于分布式场景。
  • ParameterServerStrategy(参数服务器策略):多台机器训练同一个模型,在训练过程中使用参数服务器来统一管理每个GPU训练参数。适用于分布式场景。

分布式策略使用方法:

首先需要实例化一个分布策略对象,然后将其作为参数传到训练模型中。以MirroredStrategy为例:

实例化分布策略对象:

distribution=tf.contrib.distribute.MirroredStrategy()

将对象传入tf.keras中的model类中的fit方法中:

model.fit(loss="mean_squared_error",
          optimizer=optimizer=optimizers.Adam(lr=0.2),
          distribute=distribution)

参考链接:

TensorFlow分布式全套(原理,部署,实例)

Tensorflow分布式并行策略

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Faster R-CNN是一种经典的深度学习目标检测模型,由RPN(Region Proposal Network)和Fast R-CNN两部分组成。通过使用RPN网络,模型可以在目标检测前自动生产多个预选框,从而降低计算复杂度和提高模型的表现。本文主要介绍如何使用TensorFlow2构建Faster R-CNN模型,并在COCO数据集上进行训练和测试。 首先,在搭建Faster R-CNN模型前,需要安装必要的库和环境。包括TensorFlow2、NumPy、Pillow等。接着,下载COCO数据集并进行数据预处理。使用COCO API将图像数据和标注文件解析成可读取的格式,并进行数据增强,包括随机水平翻转、改变亮度和对比度等。 然后,是Faster R-CNN的网络结构。首先搭建RPN网络,通过一个基础网络(如VGG16或Resnet50)提取图像特征,将特征图传入RPN网络,生成多个预选框。接着,将预选框传入Fast R-CNN网络,通过ROI pooling将ROI区域转换为统一尺寸的特征图,最终输出目标类别和位置信息。 接下来,是模型的训练。定义损失函数,包括分类损失和回归损失,并使用优化器进行模型的迭代。同时,使用学习率调度和正则化等技术提高模型的表现,并进行批量归一化处理,加快收敛速度。 最后,进行模型的测试。使用COCO评测指标计算模型的AP值和mAP值,并对模型的结果进行可视化展示,包括预测框、真实框和标注信息等。 总体来说,使用TensorFlow2实现Faster R-CNN目标检测模型一个复杂而有挑战性的任务,需要掌握深度学习和计算机视觉相关的知识和技术,同时还需要具备较强的编程能力和实战经验。但是,通过不断学习和实践,可以逐步提升模型的表现和应用价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值