Untuk proyek di jaringan saraf, saya menggunakan Pytorch dan saya bekerja dengan dataset EMNIST.

Kode yang sudah diberikan dimuat di dataset:

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

Dan mempersiapkannya:

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

Kemudian, ketika semua konfigurasi jaringan ditentukan, ada loop for untuk melatih model per epoch:

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

Dalam kode contoh ini berfungsi dengan baik.

Untuk tugas saya, saya diberikan dataset yang saya muat sebagai berikut:

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]

Kemudian, saya membuat train_dataset sebagai berikut:

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

Dan gunakan langkah yang sama untuk menyiapkannya:

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

Namun, ketika saya mencoba menggunakan loop yang sama seperti sebelumnya:

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

Saya mendapatkan kesalahan berikut:

ValueError: too many values to unpack (expected 2)

Siapa yang tahu apa yang bisa saya lakukan sehingga saya bisa melatih dataset saya dengan loop ini?

2
Emil 16 Juni 2020, 13:23

1 menjawab

Jawaban Terbaik

Set data yang Anda buat dari data EMNIST adalah tensor tunggal, dan oleh karena itu, pemuat data juga akan menghasilkan tensor tunggal, dengan dimensi pertama adalah dimensi batch. Ini menghasilkan upaya untuk membongkar tensor itu di seluruh dimensi batch, yang tidak berfungsi karena ukuran batch Anda lebih besar dari dua, tetapi juga bukan itu yang Anda inginkan.

Anda dapat menggunakan torch.utils.data.TensorDataset untuk dengan mudah buat kumpulan data, yang menghasilkan tupel gambar dan labelnya masing-masing, seperti halnya kumpulan data MNIST.

train_dataset = torch.utils.data.TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
1
Michael Jungo 16 Juni 2020, 11:06