4

我正在 TensorFlow 中使用神经网络进行一些实验。最新版本的发行说明说 DataSet 是今后推荐的用于提供输入数据的 API。

一般来说,从外界取数值时,需要对取值范围进行归一化处理;如果您插入长度、质量、速度、日期或时间等原始数字,则产生的问题将是病态的;有必要检查值的动态范围并标准化为范围(0,1)(-1,1).

这当然可以在原始 Python 中完成。但是,DataSet 提供了许多数据转换功能并鼓励使用它们,其理论是生成的代码不仅更易于维护,而且运行速度更快。这表明还应该有一个内置的标准化功能。

但是,查看https://www.tensorflow.org/programmers_guide/datasets上的文档,我没有看到任何提及。我错过了什么吗?推荐的方法是什么?

4

1 回答 1

2

我对 tensorflow 数据集主要思想的理解告诉我,复杂的预处理并不直接适用,因为tf.data.Dataset专门设计用于流式传输非常大量的数据,更准确地说是张量:

ADataset可用于将输入管道表示为元素的集合(张量的嵌套结构)和作用于这些元素的转换的“逻辑计划”。

使用张量tf.data.Dataset进行操作的事实意味着要获得数据上的任何特定统计信息,例如或,需要完整且至少一次运行整个管道。以下示例行:minmaxtf.Session

iterator = dataset.make_one_shot_iterator()
batch_x, batch_y = iterator.get_next()

...旨在快速提供下一批,无论数据集的大小如何,如果dataset负责预处理,它将停止世界,直到第一批准备好。这就是为什么“逻辑计划”仅包括本地转换,以确保数据可以流式传输,此外,还允许并行进行转换。

这并不意味着用 实现标准化是不可能的tf.data.Dataset,我觉得它从来没有被设计成这样做,因此它看起来很丑(尽管我不能完全确定这一点)。但是,请注意,批量标准化非常适合这张图片,它是我看到的“不错”选项之一。另一种选择是在 numpy 中进行简单的预处理并将结果输入tf.data.Dataset.from_tensor_slices. 这不会使管道变得更加复杂,但根本不会限制您使用tf.data.Dataset

于 2017-11-10T12:15:04.097 回答