2017-01-29 11 views
19

अपने डेटा पर torch.utils.data.Dataset और torch.utils.data.DataLoader का उपयोग कैसे करें (केवल torchvision.datasets) नहीं?पायटोरच: कस्टम डेटासेट के लिए डेटालोडर का उपयोग कैसे करें

क्या इनबिल्ट DataLoaders का उपयोग करने का कोई तरीका है जिसे वे TorchVisionDatasets पर किसी भी डेटासेट पर उपयोग करने के लिए उपयोग करते हैं?

उत्तर

21

हां, यह संभव है। बस अपने आप से वस्तुओं को बनाएँ, उदा।

import torch.utils.data as data_utils 

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

जहां features और targets tensors हैं। features 2-डी होना चाहिए, यानी एक मैट्रिक्स जहां प्रत्येक पंक्ति एक प्रशिक्षण नमूना का प्रतिनिधित्व करती है, और targets 1-डी या 2-डी हो सकता है, इस पर निर्भर करता है कि आप स्केलर या वेक्टर की भविष्यवाणी करने की कोशिश कर रहे हैं या नहीं।

आशा है कि मदद करता है!


संपादित: @ सार्थक के सवाल के जवाब

मूल रूप से हाँ। आप प्रकार TensorData की एक वस्तु बनाने हैं, तो निर्माता की जांच करें कि क्या सुविधा टेन्सर के पहले आयाम (जो वास्तव में data_tensor कहा जाता है) और लक्ष्य टेन्सर (target_tensor कहा जाता है) एक ही लंबाई है:

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

हालांकि, यदि आप बाद में एक तंत्रिका नेटवर्क में इन आंकड़ों को खिलाना चाहते हैं, तो आपको सावधान रहना होगा। जबकि संकल्प परतें आपके जैसे डेटा पर काम करती हैं, (मुझे लगता है) अन्य सभी प्रकार की परतें डेटा को मैट्रिक्स रूप में दी जाने की उम्मीद करती हैं। इसलिए, यदि आप इस तरह के किसी मुद्दे में भाग लेते हैं, तो एक आसान समाधान आपके 4 डी-डेटासेट (कुछ प्रकार के टेंसर के रूप में दिया गया है, उदाहरण के लिए FloatTensor) विधि view का उपयोग कर मैट्रिक्स में परिवर्तित करना होगा। अपने 5000xnxnx3 डाटासेट के लिए, यह इस तरह दिखेगा:

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

(। मूल्य -1 PyTorch बताता है स्वचालित रूप से दूसरे आयाम की लंबाई यह पता लगाने की)

data.Dataset वर्ग
+0

मेरे पास 3 डी विशेषताएं हैं: एक छवि के लिए 2 डी और रंगीन चैनलों के लिए एक अतिरिक्त आयाम। अगर मैं 5000xnxnx3 के रूप में सुविधाओं को पास करता हूं तो यह अभी भी काम करेगा। 5000 डेटा पॉइंट्स की संख्या nxnx3 है छवि का आकार – Sarthak

+0

असल में हाँ, लेकिन मेरे उत्तर के संपादन की जांच करें। – pho7

+0

ए 4 डी डेटासेट को फीचर के रूप में पारित किया जा सकता है, दृश्य विवरण के लिए कोई आवश्यकता नहीं है। – Sarthak

5

आप आसानी से करते हैं इस का विस्तार किया जा सकता है । API के अनुसार, आपको केवल दो फ़ंक्शन लागू करना है: __getitem__ और __len__

फिर आप डेटा लोडर के साथ डेटासेटर को एपीआई में दिखाए गए और @ pho7 के उत्तर में लपेट सकते हैं।

मुझे लगता है कि ImageFolder कक्षा एक संदर्भ है। कोड here देखें।

संबंधित मुद्दे