如何在Tensorflow中计算整个数据集的统计数据(总和、均值、方差等)



PandasNumpy中,计算数据集中每个特征的平均值、总数等似乎很琐碎,但我找不到任何类似的tf.data.Dataset简单函数/操作。事实上,我找到了tf.data.Dataset.reduce,它允许我运行sum进行计算,但对于其他操作(minmaxstd等(来说就不那么容易了

所以,我的问题是,有没有一种简单的方法来计算tf.data.Dataset的统计数据?此外,是否有一种方法可以标准化/规范化(整个,即非批量(tf.data.Dataset,尤其是在不使用tf.data.Dataset.reduce的情况下?

所以,我的问题是,有没有一种简单的方法来计算tf.data.Dataset的统计数据?

这取决于您希望计算的统计数据。

例如,要计算最小值或最大值,可以使用:

import numpy as np
import tensorflow as tf
ds = tf.data.Dataset.range(10, output_type=tf.float32) # sample dataset
minimum = ds.reduce(np.Inf, tf.math.minimum) # 0.0
maximum = ds.reduce(-np.Inf, tf.math.maximum) # 9.0

这是因为tf.data.Dataset.reduce对reduce函数的要求直接由最小值和最大值来满足。

为了计算平均值(也许还有其他统计数据(,一种方法是使用Keras度量。代码变得有点混乱,但它做到了:

mean = tf.keras.metrics.Mean()
for batch in ds:
mean.update_state(batch)
print(m.result().numpy()) # 7.0

要计算Keras中可用的统计数据之外的其他统计数据,我想您必须编写自己的reducer函数。例如,如果您希望实现标准偏差的减少器,您可以根据以前的stddev和新的平均值来计算它。

此外,是否有一种方法可以标准化/规范化(整个,即非批量(tf.data.Dataset,尤其是在不使用tf.data.Dataset.reduce的情况下?

不,这是不可能的,因为tf.data.Dataset中的元素在生成它们之前并不一定是已知的。

最新更新