我通过
加载(一个)图像batches =datagen.flow_from_directory(...)
我想绘制一个样本图像,以查看datagnerator的增强效果。
display(img_batch[0].shape)
显示(1、256、256、3)
然后我移调
image = img_batch[i].transpose((2,1,3,0))
第一个“错误”发生在这里。通常我会转置到
image = img_batch[i].transpose((2,1,3))
但是我得到一个错误
ValueError:轴与数组不匹配
所以我如图所示转置并得到
(256,256,3,1)
所以我认为np.squeez可以解决这个问题,但是当我使用
的任何变体时np.squeeze(image,(3,))
什么也没发生,前后的形状都一样。
我不知道会发生什么。有人有主意吗?谢谢
答案 0 :(得分:2)
您需要将np.squeeze(image,(3,))
的输出分配给变量,它不会对变量进行就地更改。
image = np.squeeze(image,(3,))
然后image.shape
将返回(256, 256, 3)
作为旁注,您可以在不指定squeeze
的情况下调用axis
,因为该函数默认会删除长度为1的尺寸。
编辑有关转置的用法:
在numpy中,transpose
函数期望axis
是与要转置的数组的维数相同维的元组。
在您的情况下,image
是一个4维数组(在挤压前进行转置),因此,当您使用transpose
调用axis=(2, 1, 3)
时,它将引发一个{{1 }}。用4维元组参数调用它可以正常工作。
如果在转置之前进行挤压,则可以使用ValueError
作为3维元组来调用转置。