m0_53587476 2024-04-20 10:44 采纳率: 0%
浏览 2

关于#python#的问题,请各位专家解答!

img

img

运用getattr(ds, smode + '_data')后,一直报以上错误,该如何解决

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 10:44
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的信息,看起来你在尝试从torch.utils.data.Dataset子类(例如CIFAR-10数据集)中获取训练或测试数据。但是,你在执行getattr(ds, smode+'_data')时遇到了AttributeError,这通常意味着你试图访问的对象没有这个属性。

    为了解决这个问题,首先我们需要确保在ds对象上存在smode+'_data'这样的属性。在CIFAR-10数据集中,我们可以直接通过train_datatest_data访问训练和测试数据。然而,如果你使用的数据集不直接提供这些属性,你需要查看数据集的具体实现,看看它如何组织数据。

    为了调试,你可以先打印出ds对象的属性列表,确认是否有对应的属性名。这里是一个简单的例子:

    print("ds attributes:", dir(ds))
    

    如果发现确实没有对应的属性,那么可能需要调整代码去正确地获取数据。例如,许多数据集会将数据和标签打包在一起,你可能需要先解包它们。下面是一个可能的修复方式,这里假设数据集提供了datatargets属性:

    if smode == 'train':
        ds_data = ds.train_data
        ds_labels = ds.train_labels
    else:
        ds_data = ds.test_data
        ds_labels = ds.test_labels
    
    ds = tnt.dataset.TensorDataset(torch.tensor(ds_data), torch.tensor(ds_labels))
    

    这段代码首先根据smode选择训练或测试数据和标签,然后创建一个TensorDataset。注意,我在这里假设了ds.train_datads.train_labelsds.test_datads.test_labels是可迭代的数据,如果是numpy数组或其他类型,可能需要转换成torch.tensor

    如果还是有问题,建议查阅你所使用数据集的文档,了解其内部结构以及如何正确访问数据。如果你能提供更具体的数据集名称,我可以提供更精确的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月20日

悬赏问题

  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗