keras - 如何计算作为神经网络输入的图像序列的 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?
解决方案
推荐阅读
- python-3.x - ImageDataGenerator.flow_from_directory() 没有增强的段错误
- ado.net - ADO.NET 后台池验证
- labview - 逐步增加数字输入
- mysql - Hibernate Native Query 失败,但 SQL Query 工作
- javascript - Mongodb 聚合在终端中运行,但是当使用 mongoose 在 node.js 中运行时,它返回“APIError:参数必须是聚合管道运算符”
- sql - 从 oracle sql 中检索大表到 pandas 的有效方法
- select - InfluxDB SELECT 查询具有不同 fieldType 的多个 MEASUREMENT
- javascript - 如何根据 div offsetHeight 更改标题的背景颜色?
- php - 如何在 php 中的 IF 中使用 OR 运算符?
- laravel - 为 laravel 特征制作一个作曲家包