DataLoader类错误Pytorch

时间:2019-02-27 04:38:09

标签: python-3.x neural-network deep-learning classloader pytorch

我是pytorch初学者用户,我正在尝试使用数据加载器。

实际上,我正在尝试将其实现到我的网络中,但是加载时间很长。因此,我调试了网络,以查看网络本身是否有问题,但事实证明,它与我的数据加载器类有关。这是代码:

 from torch.utils.data import Dataset, DataLoader
 import numpy as np
 import pandas as pd

class DiabetesDataset(Dataset):

  def __init__(self, csv):
      self.xy = pd.read_csv(csv)

  def __len__(self):
      return len(self.xy)

  def __getitem__(self, index):
       self.x_data = torch.Tensor(xy.iloc[:, 0:-1].values)
       self.y_data = torch.Tensor(xy.iloc[:, [-1]].values)
       return self.x_data[index], self.y_data[index]

 dataset = DiabetesDataset("trial.csv")
 train_loader = DataLoader(dataset=dataset,
                      batch_size=1,
                      shuffle=True,
                      num_workers=2)`

 for a in train_loader:
    print(a)

为验证数据加载器是否引起所有延迟,我创建了一个虚拟csv文件,该文件包含2列1s和2s,每列总共10个样本。然后,我循环了train_loader对象,该对象已经超过1小时,并且仍在运行,考虑到样本量较小且批处理大小设置为1。

我不确定我的代码是什么错误,这是导致此问题的原因。

任何评论/输入都将不胜感激!

1 个答案:

答案 0 :(得分:2)

您的代码中有一些错误-您能否检查一下是否可行(它在您的玩具示例中在我的计算机上正常运行):

from torch.utils.data import Dataset, DataLoader
import numpy as np
import pandas as pd
import torch


class DiabetesDataset(Dataset):

    def __init__(self, csv):
        self.xy = pd.read_csv(csv)

    def __len__(self):
        return len(self.xy)

    def __getitem__(self, index):
        x_data = torch.Tensor(self.xy.iloc[:, 0:-1].values)
        y_data = torch.Tensor(self.xy.iloc[:, [-1]].values)
        return x_data[index], y_data[index]


dataset = DiabetesDataset("trial.csv")


train_loader = DataLoader(
    dataset=dataset,
    batch_size=1,
    shuffle=True,
    num_workers=2)

if __name__ == '__main__':
    for a in train_loader:
        print(a)

编辑:您的代码无法正常运行,因为您缺少self方法(self.xy.iloc ...)中的__getitem__,并且因为您没有脚本末尾有一个if __name__ == '__main__。有关第二个错误,请参见RuntimeError on windows trying python multiprocessing