2017-07-01 2 views
2

Angenommen, ich lade MNIST von fackelvision.datasets.MNIST, aber ich möchte nur insgesamt 10000 Bilder laden, wie würde ich die Daten in Scheiben schneiden, um sie auf eine bestimmte Anzahl von Datenpunkten zu beschränken? Ich verstehe, dass der DataLoader ein Generator ist, der Daten in der Größe der angegebenen Batchgröße liefert, aber wie schneidet man Datensätze?Wie änderst du die Größe eines Pytorch-Datasets?

tr = datasets.MNIST('../data', train=True, download=True, transform=transform) 
te = datasets.MNIST('../data', train=False, transform=transform) 
train_loader = DataLoader(tr, batch_size=args.batch_size, shuffle=True, num_workers=4, **kwargs) 
test_loader = DataLoader(te, batch_size=args.batch_size, shuffle=True, num_workers=4, **kwargs) 

Antwort

2

Es ist wichtig zu beachten, dass, wenn Sie das DataLoader Objekt zu erstellen, es funktioniert nicht sofort alle Ihre Daten (seine unpraktisch für große Datensätze) laden. Es bietet Ihnen einen Iterator, mit dem Sie auf jede Probe zugreifen können.

Leider bietet DataLoader Ihnen keine Möglichkeit, die Anzahl der Proben zu steuern, die Sie extrahieren möchten. Sie müssen die typischen Möglichkeiten zum Aufteilen von Iteratoren verwenden.

Einfachste Sache (ohne Bibliotheken) wäre zu stoppen, nachdem die erforderliche Anzahl von Proben erreicht ist.

nsamples = 10000 
for i, image, label in enumerate(train_loader): 
    if i > nsamples: 
     break 

    # Your training code here. 

Oder könnten Sie itertools.islice verwenden, um die ersten 10k Proben zu erhalten. Wie so.

for image, label in itertools.islice(train_loader, stop=10000): 

    # your training code here. 
Verwandte Themen