假设您有一个代表自动编码器(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是正确的实现方式,因为常用的交叉熵的计算方法相同。但是,如果我使用版本1,则它实际上不是MSE。
我在这里找到了一个keras示例(https://keras.io/examples/variational_autoencoder/),但不幸的是,我无法通过批量培训了解keras是如何做到的。
我很高兴能提示keras如何处理这个问题(因此也需要tensorflow)或正确的版本。
谢谢!