正确的方法来计算具有批处理训练的自动编码器的MSE



假设您有一个代表自动编码器(AE(的网络。假设它具有90个输入/输出。我想用100尺寸的批次进行批处理。我将用x表示我的输入,并用y表示输出。

现在,我想使用MSE来评估我的培训过程的性能。据我了解,我的网络的输入/输出维度为大小(100,90(。

MSE计算的第一部分是在元素上执行的,它是

(x - y)²

所以我最终再次获得了大小(100,90(的矩阵。为了更好地理解我的问题,我将任意绘制现在的外观矩阵:

[[x1 x2 x3 ... x90],    # sample 1 of batch
 [x1 x2 x3 ... x90],    # sample 2 of batch
 .
 .
 [x1 x2 x3 ... x90]]    # sample 100 of batch

我已经偶然发现了从现在开始计算错误的各种版本。所有版本的目标是将矩阵减少到标量,然后可以优化。

版本1:

首先在相应样本中的二次误差上汇总,然后计算所有样本的平均值,例如:

v1 = 
[ SUM_of_qerrors_1,        # equals sum(x1 to x90)
  SUM_of_qerrors_2,
  ...
  SUM_of_qerrors_100 ]
result = mean(v1)

版本2:

计算每个样本二次误差的平均值,然后计算所有样品上的平均值,例如:

v2 = 
[ MEAN_of_qerrors_1,        # equals mean(x1 to x90)
  MEAN_of_qerrors_2,
  ...
  MEAN_of_qerrors_100 ]
result = mean(v2)

就个人而言,我认为版本1是正确的方法,因为常规使用的crossentropy是以相同的方式计算的。但是,如果我使用版本1,那不是MSE。

我在这里找到了一个keras示例(https://keras.io/examples/variational_autoencoder/(,但不幸的是,我无法弄清楚Keras在批处理训练下如何在引擎盖下进行此操作。

我要么感谢提示如何通过keras在引擎盖下处理的提示(因此是张力量(,或者正确的版本是什么。

谢谢!

版本2,即每个样本二次错误的平均值,然后计算结果数的平均值,是在keras中完成的均值:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

但是,请注意,在代码的另一部分中,将平均值超过样本是我在这里和这里广泛解释的。

相关内容

  • 没有找到相关文章

最新更新