Tensorflow 批量训练自动编码器均方误差的正确计算方法

Tensorflow 批量训练自动编码器均方误差的正确计算方法,tensorflow,machine-learning,keras,autoencoder,loss-function,Tensorflow,Machine Learning,Keras,Autoencoder,Loss Function,假设您有一个表示自动编码器(AE)的网络。假设它有90个输入/输出。我想批量训练它,批量大小为100。我将用x表示我的输入,用y表示我的输出 现在,我想用MSE来评估培训过程的绩效。据我所知,我的网络的输入/输出维度大小为(100,90) MSE计算的第一部分按元素执行,即 (x - y)² 所以我又得到了一个大小为(100,90)的矩阵。为了更好地理解我的问题,我将任意画出一个矩阵,表示现在的情况: [[x1 x2 x3 ... x90], # sample 1 of batch [

假设您有一个表示自动编码器(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)
v2 = 
[ MEAN_of_qerrors_1,        # equals mean(x1 to x90)
  MEAN_of_qerrors_2,
  ...
  MEAN_of_qerrors_100 ]

result = mean(v2)
第2版:

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

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

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

result = mean(v2)
我个人认为版本1是正确的方法,因为常用的交叉熵也是以同样的方式计算的。但是如果我使用版本1,它实际上不是MSE

我在这里找到了一个keras示例(),但不幸的是,我无法理解keras是如何通过批量培训在幕后完成这项工作的

如果能给我一个提示,keras(以及tensorflow)是如何在引擎盖下处理这一问题的,或者正确的版本是什么,我将不胜感激


谢谢大家!

第2版,即计算每个样本的二次误差平均值,然后计算结果数字的平均值,是在以下步骤中完成的:

但是,请注意,在代码的另一部分中会对样本进行平均,我已经详细解释了这一部分