计算张量流损失时的几何平均值
Posted
技术标签:
【中文标题】计算张量流损失时的几何平均值【英文标题】:geometric mean while calculationg tensorflow loss 【发布时间】:2021-10-08 03:15:19 【问题描述】:我需要计算 Aitchison 距离作为输入和输出数据集之间的损失函数。
在计算这个 mstric 时,我需要计算每一行的几何平均值(其中 [batches x features] - 丢失期间数据集的大小)。
在简单的情况下,我们可以想象只有 1 个批次,所以我只需要计算一个几何平均值作为输入数据集和一个几何平均值作为输出数据集
那么如何在 tensorflow 上完成呢?我没有找到任何指定的指标或缩减的函数
【问题讨论】:
是选项https://www.tensorflow.org/addons/api_docs/python/tfa/metrics/GeometricMean吗? 我没有找到任何使用示例,当我自己尝试tf.metrics.GeometricMean时,python没有找到它“tensorflow.keras.metrics没有属性'GeometricMean'”跨度> 它不是核心 tensorflow 包的一部分,而是一个所谓的插件。你应该先安装它。请参阅:here。 是的,我做到了,但看起来我无法以我需要的方式使用它。例如,当我调用 geomean.update_state(yTrue) 时出现错误。所以我不知道如何将它用作损失函数的一部分 好的,那么由于API不同,该指标似乎不能用作损失函数。在这种情况下,必须使用 tensorflow 函数直接计算几何平均值。 【参考方案1】:您可以使用 tensorflow
使用突出显示的数值稳定公式 here 轻松计算张量的几何平均值作为损失函数(或在您的情况下作为损失函数的一部分)。提供的代码片段与here 发布的pytorch
解决方案非常相似,该解决方案遵循上述公式(和scipy implementation)。
from tensorflow.python.keras import backend as K
def gmean_loss((y_true, y_pred, dim=1):
error = y_pred - y_true
logx = K.log(inputs)
return K.exp(K.mean(logx, dim=dim))
您可以根据需要定义dim
或将其集成到您的代码中。
【讨论】:
以上是关于计算张量流损失时的几何平均值的主要内容,如果未能解决你的问题,请参考以下文章