python - DataSet 归一化输入值的范围

标签 python tensorflow neural-network normalization tensorflow-datasets

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

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

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

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

最佳答案

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

A Dataset can be used to represent an input pipeline as a collection of elements (nested structures of tensors) and a "logical plan" of transformations that act on those elements.

tf.data.Dataset 使用张量 的事实意味着获取数据的任何特定统计数据,例如 minmax,需要一个完整的 tf.Session 并且至少有一个贯穿整个管道。以下示例行:

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

... 旨在快速提供下一批,无论数据集的大小如何,如果 dataset 负责 pre -加工。这就是为什么“逻辑计划”只包括本地转换,这确保了数据可以流式传输,此外,还允许进行转换 in parallel .

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

关于python - DataSet 归一化输入值的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47220133/

相关文章:

machine-learning - CNN 能否学会比其他特征 channel 更多地权衡某些特征 channel ?

python - Siamese 网络的 Keras 模型不学习并且总是预测相同的输出

java - 神经网络返回NaN作为输出

python - 保存和加载类实例

python - 编写函数来定义类属性

python - tensorflow 2.0 : Accessing a batch's tensors from a callback

python-3.x - valueerror 尝试将值(类型模型)转换为张量

python - 使用 Tensorflow 优化 python 中的函数

python - 如何自动将图像中的零填充添加到预期形状?

python - 使用flask获取用户的URL并压缩图像