【问题标题】:how does one normalize a TensorFlow `Dataset` pipeline?如何规范化 TensorFlow 的“数据集”管道?
【发布时间】:2020-07-07 09:52:29
【问题描述】:
我在 TensorFlow Dataset 管道中有我的数据集,我想知道如何对其进行规范化,问题是为了规范化您需要加载整个数据集,这与 TensorFlow @987654322 完全相反@ 是为了。
那么究竟如何规范化 TensorFlow Dataset 管道?以及如何将其应用于新数据? (即用于做出新预测的数据)
【问题讨论】:
标签:
python
tensorflow
machine-learning
keras
tensorflow-datasets
【解决方案1】:
您不需要一次标准化整个数据集。
根据您使用的数据类型,您可以使用 .map() 函数,其唯一目的是规范您正在使用的特定批次数据(例如,将图像中的每个像素除以 255.0。
例如,您可以使用map(preprocess_function_1).map(preprocess_function_2).batch(batch_size),其中 preprocess_function_1 和 preprocess_function_2 是预处理张量的两个不同函数。如果您使用.batch(batch_size),那么预处理函数将按顺序应用于batch_size 元素数量,您无需在使用tf.data.Dataset() 之前更改整个数据集
【解决方案2】:
除了遍历整个数据集并收集您需要的信息之外别无他法。这就是他们在 Tensorflow 文档 examples 中所做的事情。例如,他们在这里获取所有单词以标记输入:
tokenizer = tfds.features.text.Tokenizer()
vocabulary_set = set()
for text_tensor, _ in all_labeled_data:
some_tokens = tokenizer.tokenize(text_tensor.numpy())
vocabulary_set.update(some_tokens)
vocab_size = len(vocabulary_set)
对于标准化,您需要遍历所有数据并跟踪平均值、最大值等。