TypeError:无法处理此数据类型

2024-09-21 05:37:21 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试将显著性映射放入图像并创建新的数据集

trainloader = utilsxai.load_data_cifar10(batch_size=1,test=False)
testloader =  utilsxai.load_data_cifar10(batch_size=128, test=True)

这个负载是torchvision

data = trainloader.dataset.data 

trainloader.dataset.data = (data * sal_maps_hf).reshape(data.shape)

sal_maps_hf shape with (50000,32,32,3)
and trainloader shape with (50000,32,32,3)

但是当我运行这个

for idx,img in enumerate(trainloader):

--------------------------------------------------------------------------- KeyError Traceback (most recent call last) ~/venv/lib/python3.7/site-packages/PIL/Image.py in fromarray(obj, mode) 2644 typekey = (1, 1) + shape[2:], arr["typestr"] -> 2645 mode, rawmode = _fromarray_typemap[typekey] 2646 except KeyError:

KeyError: ((1, 1, 3), '

During handling of the above exception, another exception occurred:

TypeError Traceback (most recent call last) in ----> 1 show_images(trainloader)

in show_images(trainloader) 1 def show_images(trainloader): ----> 2 for idx,(img,target) in enumerate(trainloader): 3 img = img.squeeze() 4 #pritn(img) 5 img = torch.tensor(img)

~/venv/lib/python3.7/site-packages/torch/utils/data/dataloader.py in next(self) 344 def next(self): 345 index = self._next_index() # may raise StopIteration --> 346 data = self._dataset_fetcher.fetch(index) # may raise StopIteration 347 if self._pin_memory: 348 data = _utils.pin_memory.pin_memory(data)

~/venv/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py in fetch(self, possibly_batched_index) 42 def fetch(self, possibly_batched_index): 43 if self.auto_collation: ---> 44 data = [self.dataset[idx] for idx in possibly_batched_index] 45 else: 46 data = self.dataset[possibly_batched_index]

~/venv/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py in (.0) 42 def fetch(self, possibly_batched_index): 43 if self.auto_collation: ---> 44 data = [self.dataset[idx] for idx in possibly_batched_index] 45 else: 46 data = self.dataset[possibly_batched_index]

~/venv/lib/python3.7/site-packages/torchvision/datasets/cifar.py in getitem(self, index) 120 # doing this so that it is consistent with all other datasets 121 # to return a PIL Image --> 122 img = Image.fromarray(img) 123 124 if self.transform is not None:

~/venv/lib/python3.7/site-packages/PIL/Image.py in fromarray(obj, mode) 2645 mode, rawmode = _fromarray_typemap[typekey] 2646 except KeyError: -> 2647 raise TypeError("Cannot handle this data type") 2648 else: 2649 rawmode = mode

TypeError: Cannot handle this data type

trainloader.dataset.__getitem__

getitem of Dataset CIFAR10 Number of datapoints: 50000 Root location: /mnt/3CE35B99003D727B/input/pytorch/data Split: Train StandardTransform Transform: Compose( Resize(size=32, interpolation=PIL.Image.BILINEAR) ToTensor() )


Tags: inpyselfimgdataindexvenvlib
1条回答
网友
1楼 · 发布于 2024-09-21 05:37:21

你的sal_maps_hf不是np.uint8。你知道吗

根据问题和评论中的部分信息,我猜您的掩码是dtypenp.float(或类似的),通过乘以data * sal_maps_hf,您的数据将被强制转换为dtype,而不是np.uint8,后者会使PIL.Image引发异常。你知道吗

尝试:

trainloader.dataset.data = (data * sal_maps_hf).reshape(data.shape).astype(np.uint8)

相关问题 更多 >

    热门问题