Tensorflow 批量训练自动编码器均方误差的正确计算方法
假设您有一个表示自动编码器(AE)的网络。假设它有90个输入/输出。我想批量训练它,批量大小为100。我将用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 [
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版,即计算每个样本的二次误差平均值,然后计算结果数字的平均值,是在以下步骤中完成的: 但是,请注意,在代码的另一部分中会对样本进行平均,我已经详细解释了这一部分