TensorFlow 高性能数据输入管道设计指南

2023-11-02

TensorFlow版本:1.12.0

本篇主要介绍怎么使用 tf.data API 来构建高性能的输入 pipeline。

tf.data官方教程详见前面的博客<<<<<<<<<<tf.data官方教程


GPU、TPU的使用能够从根本上减少单个训练step所需的时间。但优异的性能不仅依赖于高速的计算硬件,也要求有一个高效的输入管道(Input Pipeline Performance Guide),这个管道在当前step完成前,进行下一个 step 需要的数据的准备。 tf.data API 对于灵活且高效的输入管道的建立非常有帮助。这个文档解释了 tf.data API 的特性,并介绍了构建高性能的 TensorFlow 数据输入管道的过程。

本文主要包含以下内容:

  • 介绍数据输入管道的结构(本质是一个 ETL 过程)。
  • tf.data 中,优化数据输入管道的常用方法。
  • 介绍了数据操作顺序对数据输入管道性能的影响。
  • 优异的数据输入管道应该具备的一些特质。

1. 数据输入管道的结构

TensorFlow数据输入管道可以被抽象为一个 ETL 过程(Extract,Transform,Load):

  • Extract:从硬盘上读取数据 ------ 可以是本地(HDD 或 SSD),也可以是网盘(GCS 或 HDFS)
  • Transform:使用 CPU 去解析、预处理数据 ------ 比如:图像解码、数据增强、变换(比如:随机裁剪、翻转、颜色变换)、打乱、batching。
  • Load:将 Transform 后的数据加载到 计算设备 ------ 例如:GPU、TPU 等设备。

上述的数据输入管道使用 CPU 来进行数据的 ETL 过程,从而让 GPU、TPU 等设备专心进行模型的训练过程(提高了设备的利用率)。另外,将数据输入管道抽象为 ETL 过程,有利于我们对数据输入管道进行优化。

当使用 tf.estimator.Estimator API 时,input_fn 需要完成 Extract 和 Transform 两个阶段。

def parse_fn(example):
  "Parse TFExample records and perform simple data augmentation."
  example_fmt = {
   
    "img_encoded": tf.FixedLenFeature((), tf.string, ""),
    "img_label":
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow 高性能数据输入管道设计指南 的相关文章

随机推荐

  • 深度学习的基础知识与问题汇总

    20200813 引言 这里记录一下深度学习使用过程中的一些细节的地方 多分类时 预测过程 损失函数为Nan或者Inf 如何在keras中计算精确率和召回率 如何获取中间某一层的输出 如何获取网络结构 从别人的存储的h5模型文件中 关于so
  • VSCode设置git-bash终端,显示分支名(未解决)

    学习时发现我的终端不能像老师的这样显示分支名 解决方法如下 设置git bash终端 file gt preferences gt settings 搜索window 编辑settings json 添加以下内容 这里出现了一个问题 我直接
  • AD22如何添加元器件库

    1 打开libPkg项目 2 编译 3 查看添加好的库 4 查看添加好的库 当然 如果你手上有IntLib文件 已经编译好的库 可以直接点击install 进行安装 比如从这个地方去下载 1 Other Installers User Ma
  • no such file or directory, scandir ‘xxxxxnode_modules/node-sass/vendor‘

    Syntax Error Error ENOENT no such file or directory scandir xxxxx node modules node sass vendor 一 报错信息 Syntax Error Erro
  • Redis+Mysql模式和内存+硬盘模式的异同

    学习任何新知识 都是一个循序渐进的过程 从刚开始的懵懂无知 到简单熟悉 然后突然的彻悟 成果让人欣喜若狂 心情也会快乐很久 redis mysql和内存 硬盘类似的地方 首先看图 首先 我们知道 mysql是持久化存储 存放在磁盘里面 检索
  • Latex:图片、表格占据双栏排版的两栏时 的位置控制

    目录 1 问题 怎么在双栏排版中 让占据两栏的表格出现在页面顶端 2 解决 在latex中加入 usepackage stfloats 即可 1 图片 占据两栏显示在页面顶端 2 表格 占据两栏显示在页面顶端 1 问题 怎么在双栏排版中 让
  • CMake buildsystem

    官方文档 https cmake org cmake help latest manual cmake buildsystem 7 html 介绍 基于CMake的构建系统 buildsystem 其组织形式是一组高级逻辑目标 high l
  • LR1语法分析C++实现:一、项目集簇的生成

    转载请注明出处 https blog csdn net hhhhhhhhhhkkkkkkkkkk 嗯 先上代码 后面慢慢写注释 我好像太鸡智 贼 了 哈哈 生成项目集簇 基本符号的定义与相关操作 using t sym int 符号 usi
  • 第十一届蓝桥杯(国赛)——质数行者

    问题描述 小蓝在玩一个叫质数行者的游戏 游戏在一个 n m w n m w n m w 的立体方格图上进行 从北到南依次标号为第 1
  • C++编程用梯形法求积分

    这是我们学校oj的作业可以看看 include
  • 一图抵千言:带你了解最直观的神经网络架构可视化

    一张好的图抵得上一千个等式 神经网络是复杂 多维 非线性的数组运算 如何在避免过于复杂或重复的情况下呈现深度学习模型架构的重要特征呢 又该以何种方式清晰直观 启发性地呈现它们呢 好看也是加分项 无论研究还是教学项目对此都没有固定标准 本文我
  • Redis3.0集群完全版(数据迁移问题)

    Redis3 0集群安装手册 一 概述 要让集群正常工作至少需要3个主节点 在这里我们要创建6个Redis节点 其中三个为主节点 三个为从节点 对应的redis节点的ip和端口对应关系如下 127 0 0 1 7000127 0 0 1 7
  • 图说三极管,太容易懂了!(史上最详细版本)

    晶体三极管 是半导体基本元器件之一 具有电流放大作用 是电子电路的核心元件 在电子元件家族中 三极管属于半导体主动元件中的分立元件 广义上 三极管有多种 常见如下图所示 狭义上 三极管指双极型三极管 是最基础最通用的三极管 本文所述的是狭义
  • 阻止Mac版 Adobe Acrobat Pro DC的顽固的自动更新

    阻止Mac版 Adobe Acrobat Pro DC的顽固的自动更新 方案一 无效 方案二 无效 方案三 无效 方案四 验证了一年 应该有效 在mac上安装强大的Adobe Acrobat Pro DC之后 你会发现使用AZii破解之后过
  • c++命令行解析

    发现一个项目中可以用的c 的命令行解析器封装 cmdline 下载地址 GitHub tanakh cmdline A Command Line Parser c 的命令行解析 只有一个 h文件 可直接加入项目 当然Qt有自己的命令行解析类
  • Java FTP按关键字批量下载文件

    一 所需jar
  • 离职方知人心凉!

    2018年初夏 还是大三的我 在班级群里看到老师发的一条招聘信息后 写了我人生中第一封简历 殊不知我鼓了多大勇气才点击 发送邮件 或许是缘分又或许是缺人 就这样我通过了一面二面 正式入职 由此开启了我的职业生涯 实习生的工资很低 但工作强度
  • 软件测试网上订餐系统,星月外卖网上订餐系统软件测试报告(正式).doc

    文档介绍 计算机科学与技术 1 班 网上订餐系统软件测试报告 小组名称 第五组 小组成员 魏川浩 黄星月 瞿坤杨 李多福 王伟 项目组成员 组长 魏川浩 班级学号 20140181 姓名 魏川浩 负责工作 手工输入测试用例并记录测试结果 评
  • 哈希表 java

    给定一个字符串 找到它的第一个不重复的字符 并返回它的索引 如果不存在 则返回 1 案例 s leetcode 返回 0 s loveleetcode 返回 2 public class solu public int ff String
  • TensorFlow 高性能数据输入管道设计指南

    TensorFlow版本 1 12 0 本篇主要介绍怎么使用 tf data API 来构建高性能的输入 pipeline tf data官方教程详见前面的博客 lt lt lt lt lt lt lt lt lt