在 Keras 和输入参数数据类型中使用 Earth Mover Loss 方法

Posted

技术标签:

【中文标题】在 Keras 和输入参数数据类型中使用 Earth Mover Loss 方法【英文标题】:Working of the Earth Mover Loss method in Keras and input arguments data types 【发布时间】:2020-08-23 16:18:38 【问题描述】:

我在 Keras/Tensrflow 中找到了 Earth Mover Loss 的代码。我想计算图像得分的损失,但在我了解下面给出的 Earth Mover Loss 的工作原理之前,我无法做到这一点。有人可以描述一下代码中发生了什么。

模型或输出层的最后一层是这样的:

out = Dense(10,activation='softmax')(x)

此方法的输入类型应该是什么。我的 y_labels 格式为 1.2,4.9 等。我想将它与 Keras/Tensorflow 一起使用

def earth_mover_loss(y_true, y_pred):
    cdf_true = K.cumsum(y_true, axis=-1)
    cdf_pred = K.cumsum(y_pred, axis=-1)
    emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1))
    return K.mean(emd)

【问题讨论】:

【参考方案1】:

您可以将 EML 视为 CDF 概率函数的一种 RMSE

给定 N 个类别,您所需要的只是每个样本的归一化概率分数。在神经网络领域,这是通过softmax激活函数作为输出层来实现的

EML 只是比较预测与现实的 CDF

在一个有 10 个类别的分类问题中,对于单个样本,我们可以有这些数组

y_true = [0,0,0,1,0,0,0,0,0,0] # 样本属于第四类

y_pred = [0.1,0,0,0.9,0,0,0,0,0,0] #softmax层的概率输出

我们在它们上计算 CDF 并获得以下分数:

CDF_y_true = [0,0,0,1,1,1,1,1,1,1]

CDF_y_pred = [0.1,0.1,0.1,1,1,1,1,1,1,1]

如上所述,EML 计算此 CDF 上的 RMSE

y_true = np.asarray([0.,0.,0.,1.,0.,0.,0.,0.,0.,0.])
y_pred = np.asarray([0.1,0.,0.,0.9,0.,0.,0.,0.,0.,0.])

cdf_true = K.cumsum(y_true, axis=-1)
cdf_pred = K.cumsum(y_pred, axis=-1)
emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1))

在 TID2013 上 Google 的 NIMA Paper 的具体案例中,N=10,标签以浮点分数的形式表示。为了使用 EML 训练网络,需要遵循以下步骤:

以 10 个间隔将浮点分数数字化 one-hot 对标签进行编码以获得 softmax 概率并最小化 EML

在训练结束时,我们的 NN 能够在给定图像上为每个类别生成概率分数。 我们必须将此分数转换为具有相关标准偏差的平均质量分数,如本文中定义的那样。 为此,我们遵循论文中定义的程序

bins = [1,2,3,4,5,6,7,8,9,10]

y_pred = [0.1,0,0,0.9,0,0,0,0,0,0] #softmax层的概率输出

mu_score = sum(bins*y_pred) = 1*0.1 + 2*0 + 3*0 + 4*0.9 + ... + 10*0

sigma_score = sum(((bins - mu_score)**2)*y_pred)**0.5

bins = np.arange(1,11)
y_pred = np.asarray([0.1,0.,0.,0.9,0.,0.,0.,0.,0.,0.])

mu_score = np.sum(bins*y_pred)
std_score = np.sum(((bins - mu_score)**2)*y_pred)**0.5

【讨论】:

以上是关于在 Keras 和输入参数数据类型中使用 Earth Mover Loss 方法的主要内容,如果未能解决你的问题,请参考以下文章

理解keras中的数据表示形式:张量

tf.data.Dataset:不能为给定的输入类型指定 `batch_size` 参数

Keras CNN 参数太少

keras.layers.Conv2D中过滤器参数中keras使用了哪些类型的“过滤器”?

在 Keras 模型中保存元数据/信息

使用张量流在 keras 中对损失函数的输入进行切片