Des*_*wal 6 python image-processing deep-learning keras tensorflow
我在 Keras/Tensrflow 中找到了 Earth Mover Loss 的代码。我想计算图像得分的损失,但在了解下面给出的推土机损失的工作原理之前我无法做到这一点。有人可以描述一下代码中发生的情况吗?
模型的最后一层或输出层如下:
out = Dense(10,activation='softmax')(x)
Run Code Online (Sandbox Code Playgroud)
这个方法的输入类型应该是什么。我有等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)
Run Code Online (Sandbox Code Playgroud)
您可以将 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))
Run Code Online (Sandbox Code Playgroud)
以 Google 在 TID2013 上发布的 NIMA Paper 为例,N=10,标签以浮点分数的形式表示。为了使用 EML 训练网络,请遵循以下步骤:
在训练结束时,我们的神经网络能够在给定的图像上生成每个类别的概率分数。我们必须将此分数转换为平均质量分数,并具有论文中定义的相关标准差。为此,我们遵循本文中定义的程序
箱 = [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 = 总和(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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |