假设您有一个表示自编码器(AE)的网络。假设它具有90个输入/输出。我想使用大小为100的批次对其进行批量训练。我的输入用
现在,我想使用均方误差(MSE)来评估我的训练过程的性能。据我了解,我的网络的输入/输出维数为(100, 90)。
MSE计算的第一部分是逐元素进行的,即:
个人认为版本1是正确的做法,因为常用的交叉熵以相同方式计算。但如果使用版本1,则其实不是MSE。
我在这里找到了一个Keras示例(https://keras.io/examples/variational_autoencoder/),但不幸的是,我无法弄清楚Keras如何使用批量训练。
如果您能提供Keras(因此是TensorFlow)如何处理它的提示,或者哪个是正确的版本,我将不胜感激。
谢谢!
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)如何处理它的提示,或者哪个是正确的版本,我将不胜感激。
谢谢!