假设我有一个 (batch_size, loss_dim) 的二维张量,我希望得到每个数据样本的每个损失维度的总和,这可以用 tf.reduce_mean(tensor, axis=-1) 来完成。

但是,如果我的张量中有 NaN 值并且我想在计算总和时忽略这些 NaN 呢?有谁知道这是怎么做到的吗?

附注。我知道我们可以使用 tf.boolean_mask 来拟合 NaN,但是如果我简单地执行 tensor = tf.boolean_mask(tensor, tf.logical_not(tf.is_nan(tensor)) ,输出将被压缩成一个维度,这不是我想要的。

非常感谢!

最佳答案

您可以使用 tf.where() tensor 中的 NaN 值替换为零,同时保留原始形状:

tensor = ...

# Replace all NaN values with 0.0.
tensor_without_nans = tf.where(tf.is_nan(tensor), tf.zeros_like(tensor), tensor)

sum_ignoring_nans = tf.reduce_sum(tensor_without_nans, axis=-1)

关于TensorFlow:是否可以在忽略 NaN 值的同时减少总和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47599145/

10-12 12:18
查看更多