天天看点

python限制输入值范围_python – DataSet规范化输入值的范围

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

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

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

解决方法:

我对张量流数据集主要思想的理解告诉我,复杂的预处理不能直接应用,因为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与张量一起运行的事实意味着获取数据的任何特定统计量,例如min或max,需要一个完整的tf.Session并且至少有一个遍历整个管道.以下示例行:

iterator = dataset.make_one_shot_iterator()

batch_x, batch_y = iterator.get_next()

…无论数据集的大小如何,设计用于快速提供下一批次,如果数据集负责预处理,则会在第一批准备就绪之前停止世界.这就是为什么“逻辑计划”仅包括本地转换,这确保数据可以流式传输,此外,允许进行转换in parallel.

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