为什么我的机器学习图像如此混乱?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的机器学习图像如此混乱?相关的知识,希望对你有一定的参考价值。

我正在用Keras进行机器学习,我的神经网络输出图像。

我的数据是标准化的,所以我取出网络的输出并取消规范化它们,然后使用Image.fromarray将它们转换为PIL图像,然后显示这些图像。

但是,我得到的图像看起来非常混乱。例如,他们看起来像:Messy 1

要么

Messy 2

什么时候应该看起来像

Good 1

我的损失会降到相当低的数字,当我查看网络的输出值时,它们看起来相当正常。

为什么这些图像显得那么混乱?我该怎么办才能修复它?

答案

问题是您的网络输出不完全在[0,255]范围内。

即使您在网络的最后一层使用sigmoid函数(这将保证您的输出在范围(0,1)),当您“平均”图像时,您可能会以某种方式操纵它们在上方或下方[0,255]范围。

这通常与您对图像进行平均的方式有关。在我的情况下,我认为这是因为当我平均我的图像时,在零除以的情况下我有一个小的epsilon。不平衡时,这会导致值超出[0,255]范围的问题。

解决方案是在将数组转换为PIL图像之前强制数组进入[0,255]范围。

我这样做:

image_array = np.minimum(image_array, np.full(image_array.shape, 255))
image_array = np.maximum(image_array, np.full(image_array.shape, 0))

这对于数组进行两次元素比较,如果它们超过255则将值设置为255,如果它们低于0则设置为0。

然后,您可以使用生成的image_array并将其转换为与您一直在进行的Image.fromarray(image_array)的PIL图像。

你得到的图像应该看起来更像你在问题中发布的好图像。 (事实上​​,在你的情况下,它应该看起来像你发布的那个好的形象;))

以上是关于为什么我的机器学习图像如此混乱?的主要内容,如果未能解决你的问题,请参考以下文章

有没有人有关于 Spiking Neurons 或其他类型的图像机器学习的信息

python 机器学习有用的代码片段

30 段 Python 实用代码

即学即用的 30 段 Python 实用代码

学习 MNIST 后对非 MNIST 图像进行分类

机器学习手册为图像创建特征+直方图