【问题标题】:ValueError: too many values to unpack while using torch tensorsValueError:使用火炬张量时解包的值太多
【发布时间】:2020-10-05 22:20:51
【问题描述】:

对于神经网络项目,我正在使用 Pytorch 并正在使用 EMNIST 数据集。

已经给出的代码加载到数据集中:

train_dataset = dsets.MNIST(root='./data', 
                            train=True, 
                            transform=transforms.ToTensor(),
                            download=True)

并准备:

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, 
                                           batch_size=batch_size, 
                                           shuffle=True)

然后,当网络的所有配置都定义好后,会有一个 for 循环来训练每个 epoch 的模型:

 for i, (images, labels) in enumerate(train_loader):

在示例代码中,这可以正常工作。

对于我的任务,我得到了一个数据集,我按如下方式加载:

emnist = scipy.io.loadmat("DIRECTORY/emnist-letters.mat")

data = emnist ['dataset']
X_train = data ['train'][0, 0]['images'][0, 0]
y_train = data ['train'][0, 0]['labels'][0, 0]

然后,我按如下方式创建 train_dataset:

train_dataset = np.concatenate((X_train, y_train), axis = 1)
train_dataset = torch.from_numpy(train_dataset)

并使用相同的步骤来准备它:

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, 
                                           batch_size=batch_size, 
                                           shuffle=True)

但是,当我尝试使用与以前相同的循环时:

for i, (images, labels) in enumerate(train_loader):

我收到以下错误:

ValueError: too many values to unpack (expected 2)

谁知道我可以做些什么来用这个循环训练我的数据集?

【问题讨论】:

    标签: python-3.x numpy for-loop pytorch enumerate


    【解决方案1】:

    您从 EMNIST 数据创建的数据集是单个张量,因此,数据加载器也会生成单个张量,其中第一个维度是批量维度。这导致尝试跨批次维度解包该张量,这不起作用,因为您的批次大小大于 2,但也不是您想要发生的。

    您可以使用torch.utils.data.TensorDataset 轻松创建数据集,该数据集生成图像元组及其各自的标签,就像 MNIST 数据集一样。

    train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 2022-07-20
      • 1970-01-01
      • 2021-06-06
      • 2017-02-23
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多