第 2 章 数据管道:tf.data 上料车间


文档摘要

第 2 章 · 数据管道:tf.data 上料车间 章节摘要:GPU 每秒能算的运算量逐年翻倍,而数据读取与预处理往往还卡在磁盘与单线程 Python 上——训练慢,瓶颈多半不在计算而在上料。本章用 tf.data 把数据供给改造成一条可声明、可并行、可预取的流水线:从内存列表到生成器,从 TFRecord 文件到图片目录,再到 map、cache、prefetch 的调度三件套。读完你将能亲手把一条慢管道提速数倍,并说清每一环在什么时刻、被哪个线程执行。 学习目标 阅读完本章,你应当能够: 用 fromtensorslices、fromgenerator、TFRecord 三种方式构造 Dataset,并说出各自的适用边界;

第 2 章 · 数据管道:tf.data 上料车间

章节摘要:GPU 每秒能算的运算量逐年翻倍,而数据读取与预处理往往还卡在磁盘与单线程 Python 上——训练慢,瓶颈多半不在计算而在上料。本章用 tf.data 把数据供给改造成一条可声明、可并行、可预取的流水线:从内存列表到生成器,从 TFRecord 文件到图片目录,再到 map、cache、prefetch 的调度三件套。读完你将能亲手把一条慢管道提速数倍,并说清每一环在什么时刻、被哪个线程执行。

学习目标

阅读完本章,你应当能够:

  1. 用 from_tensor_slices、from_generator、TFRecord 三种方式构造 Dataset,并说出各自的适用边界;
  2. 用 shuffle、batch、repeat、map 组合出标准训练管道,解释每个变换改变的是顺序还是内容;
  3. 编写 TFRecord 的写入与解析代码,处理特征描述协议;
  4. 给管道加 cache、prefetch 与并行 map,用实测数据验证提速;
  5. 诊断"GPU 利用率低、数据饥饿"这类性能问题并归因到管道环节。

核心概念速览

图 8 数据管道全链:从磁盘到 GPU 的一条传送带

图 8 数据管道全链:从磁盘到 GPU 的一条传送带

一句金句:Dataset 对象只是一张声明式的取货计划——你写的每一环变换都不立即执行,迭代那一刻管道才开机。

子章节导航

2.1 Dataset:把数据变成可调度的流水线

Dataset 对象的本质是惰性声明,变换链不立即执行;本章导航案例——加州房价——先跑通一条最短管道。

2.2 从内存到生成器:三种上料方式

from_tensor_slices、from_tensors、from_generator 的区别,切片语义与状态保存,小数据与流式数据各自怎么上料。

2.3 从文件读取:TFRecord 与图片目录

二进制记录格式的写入与解析,特征描述协议,图片目录流的端到端读取案例。

2.4 预处理与增强:在管道里加工

map 里做数值标准化、图片翻转裁剪,one-hot 与类型整理,把预处理从训练循环搬进管道的收益。

2.5 并行、缓存与预取:管道调度三件套

num_parallel_calls 的并行模型,cache 的两段式取舍,prefetch 与 GPU 计算重叠的时序原理,含实测对比。

子章节之间的逻辑关系

本章五节是一条传送带的五段:2.1 先建立"惰性声明"的执行观,2.2 与 2.3 解决"元素从哪来",2.4 解决"元素怎么加工",2.5 解决"各段怎么并行重叠"。前三节决定管道能不能跑,2.5 决定管道喂不喂得饱 GPU——如果你只精读一节,选 2.5,它是 GPU 利用率问题的几乎全部答案。

2.1 惰性声明 ──> 2.2 内存上料 ──┐ ├──> 2.4 管内加工 ──> 2.5 并行三件套 ──> 第 3 章 fit 2.3 文件上料 ─┘

前置知识与后续延伸

  • 前置知识:第 1 章的张量规格(2.4 节的 map 输出必须符合批次约定)与执行模式直觉(2.1 的惰性正是声明式排程)。
  • 后续延伸:本章产出的批次对象是 3.3 节 fit 的直接输入;5.2 节分布式训练时分发的正是数据管道,prefetch 缓冲在多设备下的行为会在那里继续讨论;6.2 节 TFDS 仓库本质是"把 2.3 的文件读取替你做好的工具包"。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U