【问题标题】:Why are my machine learning images so messy?为什么我的机器学习图像如此混乱?
【发布时间】:2018-12-21 02:43:33
【问题描述】:

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

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

但是,我得到的图像看起来真的很乱。例如,它们看起来像:

它们应该看起来像什么时候

我的损失正在下降到相当低的数字,当我查看网络的输出值时,它们似乎相当正常。

为什么这些图片显示得如此凌乱?我能做些什么来解决它?

【问题讨论】:

  • 请注意,这是一个自我回答的问题,所以投反对票真的让我很难过。 (如果您要留下一个,请告诉我我可以做些什么来使这个问题(和答案)变得更好。)

标签: image numpy machine-learning python-imaging-library pillow


【解决方案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 图像,就像您一直在做的那样。

您得到的图片应该看起来更像您在问题中发布的那张好图片。 (事实上​​,在你的情况下,它应该看起来完全就像你发布的那张好图片;))

【讨论】:

  • 你的帖子还没过一分钟就回答了,哈哈。
  • @MattiaRighetti 哈哈是的,你可以answer your own question。当有一个错误需要我花一些时间才能弄清楚时,我倾向于这样做,如果当其他人在互联网上搜索到它时,他们会发现我的解决方案,而不必花所有时间来解决它,那就太好了他们自己的。 (即使我的解决方案不起作用,它也可能以其他方式帮助他们。)只是传播知识:)
猜你喜欢
  • 2014-06-23
  • 2019-05-06
  • 2018-02-04
  • 1970-01-01
  • 2022-11-25
  • 2011-06-04
  • 2020-09-20
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多