我正在使用TensorFlow中的神经网络进行一些实验。最新版本的发行说明称DataSet以后是推荐的用于提供输入数据的API。
通常,当从外界获取数值时,需要对值的范围进行标准化;如果你插入原始数字,如长度,质量,速度,日期或时间,所产生的问题将是病态的;有必要检查值的动态范围,并将其标准化为范围(0,1)
或(-1,1)
。
这当然可以在原始Python中完成。但是,DataSet提供了许多数据转换功能并鼓励使用它们,理论上结果代码不仅更易于维护,而且运行速度更快。这表明还应该有一个内置的标准化功能。
查看https://www.tensorflow.org/programmers_guide/datasets处的文档但是,我没有看到任何提及此类文件。我错过了什么吗?建议的方法是什么?
答案 0 :(得分:2)
我对张量流数据集的理解主要观点告诉我,复杂的预处理不能直接应用,因为tf.data.Dataset
专门用于流非常大量的数据,更准确地说是张量:
Dataset
可用于将输入管道表示为集合 元素(张量的嵌套结构)和“逻辑计划” 作用于这些元素的转换。
tf.data.Dataset
与张量一起操作的事实意味着获取数据的任何特定统计信息,例如min
或max
,需要完整的{{} 1}}并且至少有一个贯穿整个管道。以下示例行:
tf.Session
...设计用于快速提供下一批次,无论数据集的大小如何,如果iterator = dataset.make_one_shot_iterator()
batch_x, batch_y = iterator.get_next()
负责预处理,则会在第一批准备就绪之前停止世界。这就是为什么“逻辑计划”仅包括本地转换,这确保了数据可以流式传输,此外,还允许进行转换in parallel。
这并不意味着用dataset
实现规范化是不可能的,我觉得它从来没有被设计成这样做,因此它看起来很难看(虽然我不能绝对肯定那个)。但请注意batch-normalization完全适合这张图片,这是我看到的“好”选项之一。另一种选择是在numpy中进行简单的预处理,并将其结果输入tf.data.Dataset
。这不会使管道变得更加复杂,但并不会限制您完全使用tf.data.Dataset.from_tensor_slices
。