目录

ETL过程

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

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

两个新概念

tf.data.Dataset

表示一系列元素,其中每个元素包含一个或多个 Tensor 对象。例如,在图片管道中,一个元素可能是单个训练样本,具有一对表示图片数据和标签的张量。

tf.data.Iterator

这是从数据集中提取元素的主要方法。Iterator.get_next() 指令会在执行时生成 Dataset 的下一个元素,并且此指令通常充当输入管道和模型之间的接口。最简单的迭代器是“单次迭代器”,它会对处理好的 Dataset 进行单次迭代。要实现更复杂的用途,您可以通过 Iterator.initializer 指令使用不同的数据集重新初始化和参数化迭代器,这样一来,您就可以在同一个程序中对训练和验证数据进行多次迭代(举例而言)。

tf.data.Dataset 创建

直接从Tensor创建

直接从 Tensor 创建 Dataset(例如 Dataset.from_tensor_slices());当然 Numpy 也是可以的,TensorFlow 会自动将其转换为 Tensor。

通过变换

通过对一个或多个 tf.data.Dataset 对象来使用变换(例如 Dataset.batch())来创建 Dataset

参考