遇到“TypeError:'<' not supported between instances of 'Tensor' and 'list'" when going through dataset

问题描述 投票:0回答:2

我正在复制 ResNet(来源:https://arxiv.org/abs/1512.03385)。

我遇到了错误“TypeError: '<' not supported between instances of 'Tensor' and 'list'" when trying to go through several different dataset in different sections of my code.

我尝试了不同的修复,但没有成功:(i)我删除了枚举,因为我担心使用它可能会导致问题(ii)我尝试通过数据加载器而不是数据集,但它不起作用

第一次:当我尝试查看图像时:


    for images, _ in train_loader:
        print('images.shape:', images.shape)
        plt.figure(figsize=(16,8))
        plt.axis('off')
        plt.imshow(torchvision.utils.make_grid(images, nrow=16).permute((1, 2, 0)))
        break

第二次/第三次:当我尝试验证/测试 resnet 时:


    with torch.no_grad():
        for j, inputs, labels in enumerate(test_loader, start=0):
            outputs = resnet_models[i](inputs) 
            _, prediction = torch.max(outputs, dim=1) 
            

你可能会注意到,我在训练resnet时并没有遇到这个错误,而且代码非常相似:

for batch, data in enumerate(train_dataloader, start=0): 
    inputs, labels = data
    inputs, labels = inputs.to(device), labels.to(device) 

错误信息(以第一个错误为例,其余都差不多)

TypeError Traceback(最近一次调用最后一次) 输入 [38],在 () 中 6 print(“标准化后的图像”) 7 打印(“--------------------------”) ----> 图像为 8,training_data 中的 _: 9 排序=假 10 print('images.shape:', images.shape)

文件 ~/miniconda3/envs/resnet/lib/python3.9/site->packages/torch/utils/data/dataset.py:471,在子集中。getitem(self, idx) 第469章 第470章 --> 471 返回 self.dataset[self.indices[idx]]

文件〜/miniconda3/envs/resnet/lib/python3.9/site->packages/torchvision/datasets/cifar.py:118,在CIFAR10中。getitem(self,index) [第 115 章] 117 如果 self.transform 不是 None: --> 118 img = self.transform(img) 120 如果 self.target_transform 不是 None: 第121话

文件 ~/miniconda3/envs/resnet/lib/python3.9/site->packages/torchvision/transforms/transforms.py:95,在 Compose 中。

call(self, img) 93 def call(自我,img): 94 for t in self.transforms: ---> 95 img = t(img) 96 返回图片

文件 ~/miniconda3/envs/resnet/lib/python3.9/site->packages/torch/nn/modules/module.py:1110,在 Module._call_impl(self, *input, **kwargs) 攀上漂亮女局长之后1106 攀上漂亮女局长之后1107 第1108章 [第 1109 章] -> 1110 返回forward_call(*输入,**kwargs) 第1111章 第1112章

文件 ~/miniconda3/envs/resnet/lib/python3.9/site->packages/torchvision/transforms/transforms.py:707,在 RandomHorizontalFlip.forward(self, >img) 699 def 转发(自身,img): 第700章 第701章 702 img (PIL Image or Tensor):要翻转的图像。 (...) 705 PIL图像或张量:随机翻转图像。 第706章 --> 707 if torch.rand(1)

类型错误:'< self.p: 708 return F.hflip(img) 709 return img

<' not supported between instances of 'Tensor' and 'list'

machine-learning deep-learning dataset resnet
2个回答
0
投票

torchvision.transforms.RandomHorizontalFlip([0.5]),

错误在于这个转换的输入不应该是列表,而应该是

torchvision.transforms.RandomHorizontalFlip(0.5),

所以,如果有什么我可以推荐的,那就是也许有一些列表参数正在传递,不应该在某些转换或其他方式中。


0
投票

类型错误:“张量”和“列表”实例之间不支持“...”

当我尝试将
<

与张量和列表一起使用时,如下所示。 *将

<=
>
>=
与张量和列表一起使用也会出现相同的错误:
import torch

torch.tensor([5, 10, 15]) < [2] # Error

所以,我将
<

与张量和

2
一起使用,然后我可以得到如下所示的结果:
import torch

torch.tensor([5, 10, 15]) < 2 # tensor([False, False, False])

此外,您可以将 
==

!=
与张量和列表一起使用,则可以得到如下所示的结果:
import torch

torch.tensor([5, 10, 15]) == [2] # False

import torch

torch.tensor([5, 10, 15]) != [2] # True
	
© www.soinside.com 2019 - 2024. All rights reserved.