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

Hoa*_*yen 5 python tensorflow

计算数据集中每个特征的平均值、总数等在Pandas和中似乎相当微不足道Numpy,但我找不到任何类似的简单函数/操作tf.data.Dataset。实际上我发现tf.data.Dataset.reduce它允许我计算 running ,但对于其他操作( 、、等) sum来说并不那么容易。所以,我的问题是,是否有一种简单的方法来计算 的统计数据?此外,有没有办法标准化/规范化(整个,即不是批量),特别是如果不使用?minmaxstd

tf.data.Datasettf.data.Datasettf.data.Dataset.reduce

rug*_*tal 4

所以,我的问题是,是否有一种简单的方法来计算 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
Run Code Online (Sandbox Code Playgroud)

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

要计算平均值(可能还包括其他统计数据),一种方法是使用Keras 指标。代码变得有点混乱,但它确实达到了目的:

mean = tf.keras.metrics.Mean()
for batch in ds:
    mean.update_state(batch)

print(m.result().numpy()) # 7.0
Run Code Online (Sandbox Code Playgroud)

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

此外,有没有办法标准化/标准化(整个,即不是批量)tf.data.Dataset,特别是如果不使用tf.data.Dataset.reduce?

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