【问题标题】:Why should I use tf.data?为什么要使用 tf.data?
【发布时间】:2019-07-20 13:04:43
【问题描述】:
我正在学习 tensorflow,tf.data API 让我很困惑。在处理大型数据集时显然更好,但在使用数据集时,必须将其转换回张量。但是为什么不首先使用张量呢?为什么以及何时应该使用 tf.data?
为什么不能让 tf.data 返回整个数据集,而不是通过 for 循环处理它?当只是最小化数据集的一个函数时(使用类似 tf.losses.mean_squared_error 的东西),我通常通过张量或 numpy 数组输入数据,我不知道如何通过 for 循环输入数据。我该怎么做?
【问题讨论】:
标签:
python
numpy
tensorflow
machine-learning
【解决方案1】:
-
tf.data 模块具有特定工具,可帮助您为 ML 模型构建输入管道。输入管道接收原始数据,对其进行处理,然后将其提供给模型。
什么时候应该使用tf.data 模块?
当您拥有 .csv 或 .tfrecord 等文件形式的大型数据集时,tf.data 模块非常有用。 tf.data.Dataset 可以高效地执行样本的混洗和批处理。适用于大型数据集和小型数据集。它可以结合训练和测试数据集。
如何创建批次并迭代它们以进行训练?
我认为您可以使用 NumPy 和 np.reshape 方法有效地做到这一点。 Pandas 可以为您读取数据文件。然后,您只需要一个 for ... in ... 循环来获取每个批次并将其传递给您的模型。
如何将 NumPy 数据提供给 TensorFlow 模型?
有两个选项可以使用tf.placeholder() 或tf.data.Dataset。
-
tf.data.Dataset 的实现要容易得多。我建议使用它。此外,还有一些很好的方法。
-
tf.placeholder 创建一个占位符张量,将数据提供给 TensorFlow 图。此过程会消耗更多时间来输入数据。