谁能解释本文中使用的像素精度度量标准?也是KL散度损失的一个问题

时间:2019-12-27 17:24:03

标签: python tensorflow machine-learning statistics probability

所以我要根据这篇论文来做一个项目:

https://arxiv.org/ftp/arxiv/papers/1901/1901.07761.pdf

在本文中,使用U-Net生成优化的机械结构。我正在尝试重新创建模型并将其用于我自己的生成数据。

现在我有两个问题:

在7.1中提到了逐像素精度。现在,我正在使用默认的Keras度量“准确性”,它甚至不能达到论文中的准确性。 (从0.3ish开始,直到0.45)。我一直要做的是手动将生成的结构与训练集中的地面真实情况进行比较。经常有一些模型具有更好的准确性,但是结构意义不大。他们在论文中使用了什么精度指标?

在4.2.1下的论文中,提到了KL散度。我的问题是,在一到两个纪元后,KL散度变成负数(一个指标,我不使用概率分布吗?),所以我改用二元交叉熵,它提供了很好的结果,但仍然困扰着我,我不能使用建议的损失法。另一点是L2正则化:使用1e-7或更低的l2值可获得最佳结果,该值比通常使用的值低。这说明什么?

我想提到的另一点:我的数据尺寸与本文中使用的尺寸略有不同:我使用65x49作为输入尺寸。

如果有人可以帮助我解决问题,我将不胜感激。

我还尝试了以下代码:

def kullback_leibler_divergence_test(y_true, y_pred):

   true_sum = K.sum(y_true)

   pred_sum = K.sum(y_pred)

   new_true = y_true/true_sum

   new_pred = y_pred/pred_sum

   y_true = K.clip(new_true, K.epsilon(), 1)

   y_pred = K.clip(new_pred, K.epsilon(), 1)

   return K.sum(y_true * K.log(y_true / y_pred), axis=-1)

我得到了非负损失!!但是问题是它非常低。

另一种方法正在使用:

def kullback_leibler_divergence_test_2(y_true, y_pred):

    y_true = K.clip(y_true, K.epsilon(), 1)
    y_pred = K.clip(y_pred, K.epsilon(), 1)
    return K.sum(y_true * abs(K.log(y_true /  y_pred)), axis=-1)

但是与二进制交叉熵相比,损失相当大,我感到损失没有按预期进行。

0 个答案:

没有答案