首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决错误: TypeError:图像数据的无效形状(60、60、8)

如何解决错误: TypeError:图像数据的无效形状(60、60、8)
EN

Stack Overflow用户
提问于 2022-02-23 13:32:52
回答 1查看 1.3K关注 0票数 0

我对火把很陌生。我正在尝试创建一个DCGAN项目。我用了整个官方的火把教程作为基地。

我有一个numpy数组,它是八个数组的组合,它给出了一个形状(60,60,8),这个形状是特殊的。

代码语言:javascript
复制
lista2 = [0, 60, 120, 180, 240, 300, 360, 420]
total = []
for i in lista2:
   N1 = intesity[0:60, i:i+60]
   total.append(N1)
   N2 = intesity[60:120, i:i+60]
   total.append(N2)
   N3 = intesity[120:180, i:i+60]
   total.append(N3)
   N4 = intesity[180:240, i:i+60]
   total.append(N4)
   N5 = intesity[240:300, i:i+60]
   total.append(N5)
   N6 = intesity[300:360, i:i+60]
   total.append(N6)
   N7 = intesity[360:420, i:i+60]
   total.append(N7)
   N8 = intesity[420:480, i:i+60]
   total.append(N8)

total = np.reshape(total, (64, 60,60,8))
total  -= total.min()
total  /= total.max()
total = np.asarray(total)
print(np.shape(total)
代码语言:javascript
复制
(64, 60, 60, 8)

正如您所看到的,该数组中有64个元素,有64个训练图像(目前很少),该数组被转换为张量,然后转换为py手电筒数据集。

代码语言:javascript
复制
tensor_c = torch.tensor(total)

创建数据集和数据采集器时,当试图绘制此DCGAN的培训映像时,会出现以下错误

代码语言:javascript
复制
dataset = TensorDataset(tensor_c) # create your datset
dataloader = DataLoader(dataset) # create your dataloader

real_batch = next(iter(dataloader))
plt.figure(figsize=(16,16))
plt.axis("off")
plt.title("Training Images")
plt.imshow(np.transpose(vutils.make_grid(real_batch[0].to(device)[:64], padding=0, normalize=True).cpu(),(1,2,0)))
dataset_size = len(dataloader.dataset)
dataset_size
代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-5ba2d666ef25> in <module>()
     10 plt.axis("off")
     11 plt.title("Training Images")
---> 12 plt.imshow(np.transpose(vutils.make_grid(real_batch[0].to(device)[:64], padding=0, normalize=True).cpu(),(1,2,0)))
     13 dataset_size = len(dataloader.dataset)
     14 dataset_size

5 frames
/usr/local/lib/python3.7/dist-packages/matplotlib/image.py in set_data(self, A)
    697                 or self._A.ndim == 3 and self._A.shape[-1] in [3, 4]):
    698             raise TypeError("Invalid shape {} for image data"
--> 699                             .format(self._A.shape))
    700 
    701         if self._A.ndim == 3:

TypeError: Invalid shape (60, 60, 8) for image data

我太新了,我想知道怎样才能解决这个问题

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 14:09:45

通常,图像将存储为表单height x width x n_channels的数组,其中标准RGB映像的n_channels为3,在某些情况下为RGBA映像的n_channels为4。matplotlib对如何用8个通道绘制图像没有一个内置的理解,就像您当前的图像数据一样。

也要注意维数的排序,因为pytorch期望形式batch_idx x channel x height x width的图像便于应用2D卷积,因为它们可以跨越最后的2维。在尝试在pytorch表单中绘制图像后,要小心地将其转换为matplotlib表单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71237883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档