2017-01-29 52 views
19

Kendi verilerinizde torch.utils.data.Dataset ve torch.utils.data.DataLoader'dan nasıl yararlanılır (yalnızca torchvision.datasets değil)?PyTorch: Özel Datasets için DataLoaders nasıl kullanılır

TorchVisionDatasets adresinde kullandıkları DataLoaders ürününün herhangi bir veri kümesinde kullanılmasının bir yolu var mı?

cevap

21

Evet, bu mümkün. Sadece nesneleri kendiniz oluşturun, ör.

import torch.utils.data as data_utils 

train = data_utils.TensorDataset(features, targets) 
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True) 

nerede features ve targets tansörler bulunmaktadır. features, bir skaler veya bir vektörü tahmin etmeye çalıştığınıza bağlı olarak 2-D, yani her bir çizginin bir eğitim örneğini temsil ettiği bir matris ve targets 1-D veya 2-D olabilir.

Bu yardımcı olur umarım!


DÜZENLEME: @ Sarthak sorusuna yanıt

Temelde evet. Bununla birlikte,

assert data_tensor.size(0) == target_tensor.size(0) 

: türe TensorData bir nesne oluşturma, daha sonra yapıcı (aslında data_tensor adlandırılır) özelliği tensörünün ilk boyutlar ve (target_tensor olarak adlandırılır), hedef tensör aynı uzunluğa sahip olup olmadığını araştırır Bu verileri daha sonra bir sinir ağına beslemek istiyorsanız, o zaman dikkatli olmanız gerekir. Evrişim katmanları sizinki gibi veriler üzerinde çalışırken, (bence) diğer tüm katman türleri matris formunda verilecek verileri bekler. Yani, böyle bir sorunla karşılaşırsanız, o zaman kolay bir çözüm, 412 veri kümenizi (bir çeşit tensör, ör. FloatTensor olarak verilir) view yöntemini kullanarak bir matrise dönüştürmek olacaktır. senin 5000xnxnx3 veri kümesi için, bu şu şekilde görünecektir:

2d_dataset = 4d_dataset.view(5000, -1) 

(. değeri -1 otomatik ikinci boyutun uzunluğu anlamaya PyTorch söyler)

+0

3D özelliklerim var: bir görüntü için 2B ve renk kanalları için bir ek boyut. Özellikleri 5000xnxnx3 olarak geçersem hala çalışır mı? 5000 veri noktalarının sayısı nxnx3 görüntü boyutu – Sarthak

+0

Temelde evet, ancak cevabımın düzenlemesini kontrol edin. – pho7

+0

A 4d Veri kümesi görünüm ifadesi için gerek yoktur olarak geçirilebilir. – Sarthak

5

Kolayca bu uzayan olmak yapabilirim data.Dataset sınıf . API'a göre, tek yapmanız gereken iki işlevi yerine getirmektir: __getitem__ ve __len__.

Veri kümesini daha sonra API'de gösterildiği gibi DataLoader ile ve @ pho7'nin yanıtıyla sarabilirsiniz.

ImageFolder sınıfının bir referans olduğunu düşünüyorum. Kod here'a bakın.