You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:40:31