PyTorch报错:调用get_data函数时出现TypeError: 'function' object is not subscriptable
解决TypeError: 'function' object is not subscriptable错误
错误原因
你在调用get_data时写了data_transforms[TRAIN],但data_transforms是一个函数,不是字典或列表这类可通过下标访问的对象,所以触发了这个错误。函数需要通过括号()传递参数来调用,而非下标[]。
修正步骤
1. 修正get_data的调用代码
把下标访问改成函数调用:
train = get_data(root="My_train_path", transform=data_transforms(TRAIN))
2. 修复get_data函数的路径问题
你定义了root参数,但创建CustomImageFolder时硬编码了root=".",导致传入的路径完全无效,改成使用传入的参数:
def get_data(root, transform): image_dataset = CustomImageFolder(root=root, transform=transform) return image_dataset
3. 优化data_transforms的逻辑(可选但推荐)
原代码用三个独立的if判断会做不必要的检查,而且如果传入未知的phase会返回None,改成elif并增加错误处理更严谨:
def data_transforms(phase): if phase == TRAIN: transform = A.Compose([ A.CLAHE(clip_limit=4.0, p=0.7), A.CoarseDropout(max_height=8, max_width=8, max_holes=8, p=0.5), A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)), ToTensorV2(), ]) elif phase == VAL: transform = A.Compose([ A.Resize(height=256, width=256), A.CenterCrop(height=224, width=224), A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)), ToTensorV2(), ]) elif phase == TEST: transform = A.Compose([ A.Resize(height=256, width=256), A.CenterCrop(height=224, width=224), A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)), ToTensorV2(), ]) else: raise ValueError(f"不支持的phase值: {phase}") return transform
内容的提问来源于stack exchange,提问作者akshat nayak
相关产品推荐
相关产品推荐

