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

问题描述 投票:-1回答:1

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

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

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

要么

Messy 2

什么时候应该看起来像

Good 1

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

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

image numpy machine-learning python-imaging-library pillow
1个回答
0
投票

问题是您的网络输出不完全在[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图像。

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


推荐问答