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

PyTorch自定义Dataset报错:'WineDataset'无'x_data'属性

问题:PyTorch Dataset 实例化后出现 AttributeError 错误

我参考PyTorch教程编写了如下代码:

import torch
import torchvision
from torch.utils.data import Dataset,DataLoader
import numpy as np
import math
class WineDataset(Dataset):
    def __int__(self):
        xy =np.loadtxt("wine.csv",delimiter=',',dtype=np.float32,skiprows=1)
        self.n_samples =xy.shape[0]
        self.x_data = torch.from_numpy(xy[:, 1:])
        self.y_data = torch.from_numpy(xy[:, [0]])
    def __getitem__(self, index):
        return self.x_data[index],self.y_data[index]
    def __len__(self):
        return self.n_samples
# create dataset
dataset = WineDataset()
# get first sample and unpack
first_data = dataset[0]
features, labels = first_data
print(features, labels)

运行时出现以下错误:

Traceback (most recent call last):
  File "C:\Users\User\PycharmProjects\AI_Project\Dataset_DataLoader.py", line 19, in <module>
    first_data = dataset.__getitem__(0)
  File "C:\Users\User\PycharmProjects\AI_Project\Dataset_DataLoader.py", line 13, in __getitem__
    return self.x_data[index],self.y_data[index]
AttributeError: 'WineDataset' object has no attribute 'x_data'

请问错误出在哪里?


解答

错误根源是类的构造函数名称写错了:你把Python构造函数__init__误写成了__int__,导致类实例化时完全没有执行初始化逻辑,self.x_data、self.y_data这些属性从未被创建,因此调用__getitem__时会触发属性不存在的错误。

只需把构造函数名称修正为__init__即可解决问题,修正后的代码如下:

import torch
import torchvision
from torch.utils.data import Dataset,DataLoader
import numpy as np
import math
class WineDataset(Dataset):
    # 修正构造函数名称
    def __init__(self):
        xy =np.loadtxt("wine.csv",delimiter=',',dtype=np.float32,skiprows=1)
        self.n_samples =xy.shape[0]
        self.x_data = torch.from_numpy(xy[:, 1:])
        self.y_data = torch.from_numpy(xy[:, [0]])
    def __getitem__(self, index):
        return self.x_data[index],self.y_data[index]
    def __len__(self):
        return self.n_samples
# create dataset
dataset = WineDataset()
# get first sample and unpack
first_data = dataset[0]
features, labels = first_data
print(features, labels)

修改后,实例化WineDataset时构造函数会正常执行,初始化所需的属性,后续调用__getitem__就不会再报错。


内容的提问来源于stack exchange,提问作者user466534

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:48:15