繁体   English   中英

DataSet标准化输入值的范围

[英]DataSet normalize range of input values

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

通常,当从外部世界获取数值时,需要对值的范围进行标准化; 如果你插入原始数字,如长度,质量,速度,日期或时间,所产生的问题将是病态的; 有必要检查值的动态范围并归一化到范围(0,1)(-1,1)

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

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

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

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

tf.data.Dataset张量 tf.data.Dataset运行的事实意味着获取数据的任何特定统计 ,例如minmax ,需要一个完整的tf.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM