首页 > 解决方案 > 如何计算作为神经网络输入的图像序列的 MSE?

问题描述

我正在使用基于自动编码器的模型在 Keras 中重建图像视频帧。模型的输入是一个 10x100x100x1 的 numpy 数组(10 个 100x100 灰度图像)。batch size也是1,所以一次只传入10张图片。

我正在做一个实验来测试归一化对图像数据的影响(将所有像素缩放在 0 和 1 之间),以及与不使用归一化相比,这对 5 个时期后的损失值的影响。

我在这两种情况下都有两个损失值 - 由于像素值介于 0-255 之间,非归一化值要大得多。我正在使用 Keras 中的 MSE 损失来计算这些,即:

seq.compile(loss='mse', optimizer=optimizer)

我现在的问题是如何缩放这个更大的损失值,以便可以将它们与归一化值进行比较?这就是为什么我需要弄清楚 MSE 如何在 Keras 中处理这批图像 - 我知道我需要将这些损失值除以一批 10 张图像可能的最大损失值,因为我正在像这样进行标准化:

X normalised = X - MinError/MaxError - MinError

(其中 MinError 为 0,但我无法计算 MaxError)

我假设这批图像的 MSE 基本上计算了每个像素的平方误差,然后将它们相加。我是否需要将此结果除以像素数以及 1/n 因子?或者是 n = 1,因为批量大小为 1

假设这个较大的损失值表示为 X。对于每个像素,最大误差为 255 对,所以我这样做了

X / (255-0)^2 * 100 * 100 * 10

但是与预先对图像进行归一化时的损失值相比,我得到的调整后的损失值非常小,我认为这不可能是正确的,因为归一化的值肯定会更好,因此更小?那么即使batchsize = 1,我是否需要除以这个1/n的像素数?

谁能发现我哪里出错了,以及如何为 Keras 中的这些图像序列计算 MSE?

标签: kerasneural-networknormalizationautoencoder

解决方案


推荐阅读