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
相关产品推荐
相关产品推荐

