运行PyTorch图像加载代码时遇TypeError:'module'对象不可调用
解决PyTorch加载猫狗数据集时的
TypeError: 'module' object is not callable错误 这是个很容易犯的小失误,我马上就能定位问题所在:
错误根源
你在初始化ImageFolder数据集时,把参数值写错了——你传入的是transform = transforms,但这里的transforms是PyTorch的整个变换模块(比如torchvision.transforms),它本身并不是一个可调用的变换函数。而你明明已经提前定义好了一个组合好的变换流水线transform(注意没有末尾的s),却没正确引用它。当DataLoader尝试把这个"模块"当作变换函数去执行时,自然就会抛出"module object is not callable"的错误。
解决方案
只需要把ImageFolder初始化代码里的transforms改成你之前定义好的transform变量即可。
修正后的完整代码如下:
import torch from torchvision import datasets, transforms # 假设helper模块已存在 import helper data_dir = '../Cat_Dog_data/train' # 定义组合后的变换流水线 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) # 修正transform参数的引用 dataset = datasets.ImageFolder(data_dir, transform=transform) dataloader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True) # 测试数据加载器 images, labels = next(iter(dataloader)) helper.imshow(images[0], normalize=False)
额外提示
以后写代码时要注意区分模块名和自定义的变量名,尤其是当两者只有一个字母差异时(比如这里的transform和transforms),很容易手滑写错,多检查一遍就能避免这类问题~
内容的提问来源于stack exchange,提问作者spchaane
相关产品推荐
相关产品推荐

