Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 为什么我的机器学习图像如此混乱?_Image_Numpy_Machine Learning_Python Imaging Library_Pillow - Fatal编程技术网

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

Image 为什么我的机器学习图像如此混乱?,image,numpy,machine-learning,python-imaging-library,pillow,Image,Numpy,Machine Learning,Python Imaging Library,Pillow,我用Keras做机器学习,我的神经网络输出图像 我的数据是标准化的,因此我获取网络的输出并取消标准化,然后使用Image.fromarray将其转换为PIL图像,然后显示这些图像 然而,我得到的图像看起来非常混乱。例如,它们看起来像: 或 当他们看起来像 我的损失下降到了相当低的数字,当我查看网络的输出值时,它们似乎是相当正常的 为什么这些图像显示得如此混乱?我能做些什么来修复它?问题是网络的输出不完全在[0255]范围内 即使您在网络的最后一层使用sigmoid功能(这将保证您的输出在范

我用Keras做机器学习,我的神经网络输出图像

我的数据是标准化的,因此我获取网络的输出并取消标准化,然后使用
Image.fromarray
将其转换为PIL图像,然后显示这些图像

然而,我得到的图像看起来非常混乱。例如,它们看起来像:

当他们看起来像

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


为什么这些图像显示得如此混乱?我能做些什么来修复它?

问题是网络的输出不完全在[0255]范围内

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

这通常与平均图像的方式有关。在我的例子中,我认为这是因为当我平均我的图像时,在除以0的情况下,我有一个小ε。当不可用时,这会导致值超出[0255]范围的问题

解决方案是在将数组转换为PIL映像之前,将其强制进入[0255]范围

我是这样做的:

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\u数组
,将其转换为具有
image.fromarray(image\u数组)
的PIL图像,就像您一直在做的那样


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

你在发布一分钟后就回答了自己,哈哈。@MattiaRighetti哈哈,是的,你可以。当有一个bug花了我一些时间才弄明白的时候,我倾向于这样做,如果其他人在互联网上搜索到它时,他们发现了我的解决方案,而不必花所有的时间自己去弄明白,那就太好了。(即使我的解决方案不起作用,也可能在其他方面对他们有所帮助。)只是传播知识:)请注意,这是一个自我回答的问题,所以否决票真的让我很难过。(如果你打算留下一个问题,请告诉我我能做些什么来让这个问题(和答案)变得更好。)