ValueError: too many values to unpack while using torch tensors
ValueError: too many values to unpack while using torch tensors
对于神经网络项目,我正在使用 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)
谁知道我该怎么做才能用这个循环训练我的数据集?
您从 EMNIST 数据创建的数据集是单个张量,因此,数据加载器也将生成单个张量,其中第一个维度是批次维度。这导致尝试在批次维度上解压缩该张量,这不起作用,因为您的批次大小大于两个,但这也不是您想要发生的事情。
您可以使用 torch.utils.data.TensorDataset
轻松创建数据集,它会生成图像元组及其各自的标签,就像 MNIST 数据集一样。
train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
对于神经网络项目,我正在使用 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)
谁知道我该怎么做才能用这个循环训练我的数据集?
您从 EMNIST 数据创建的数据集是单个张量,因此,数据加载器也将生成单个张量,其中第一个维度是批次维度。这导致尝试在批次维度上解压缩该张量,这不起作用,因为您的批次大小大于两个,但这也不是您想要发生的事情。
您可以使用 torch.utils.data.TensorDataset
轻松创建数据集,它会生成图像元组及其各自的标签,就像 MNIST 数据集一样。
train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))