在Pandas
和Numpy
中,计算数据集中每个特征的平均值、总数等似乎很琐碎,但我找不到任何类似的tf.data.Dataset
简单函数/操作。事实上,我找到了tf.data.Dataset.reduce
,它允许我运行sum
进行计算,但对于其他操作(min
、max
、std
等(来说就不那么容易了
所以,我的问题是,有没有一种简单的方法来计算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
中的元素在生成它们之前并不一定是已知的。