ओवरफिटिंग को रोकें और TensorFlow की डेटा वृद्धि विधियों को लागू करके अपने मशीन लर्निंग मॉडल की सटीकता को बढ़ाएं।
डेटा वृद्धि प्रशिक्षण डेटा में विभिन्न परिवर्तनों को लागू करने की प्रक्रिया है। यह डेटासेट की विविधता को बढ़ाने और ओवरफिटिंग को रोकने में मदद करता है। ओवरफिटिंग ज्यादातर तब होती है जब आपके पास अपने मॉडल को प्रशिक्षित करने के लिए सीमित डेटा होता है।
यहां, आप सीखेंगे कि अपने डेटासेट में विविधता लाने के लिए TensorFlow के डेटा वृद्धि मॉड्यूल का उपयोग कैसे करें। यह नए डेटा बिंदुओं को उत्पन्न करके ओवरफिटिंग को रोकेगा जो मूल डेटा से थोड़े अलग हैं।
नमूना डेटासेट जिसका आप उपयोग करेंगे
आप बिल्लियों और कुत्तों के डेटासेट का उपयोग करेंगे कागल. इस डेटासेट में बिल्लियों और कुत्तों की लगभग 3,000 छवियां हैं। इन छवियों को प्रशिक्षण, परीक्षण और सत्यापन सेटों में विभाजित किया गया है।
लेबल 1.0 एक कुत्ते का प्रतिनिधित्व करता है जबकि लेबल 0.0 एक बिल्ली का प्रतिनिधित्व करता है।
डेटा वृद्धि तकनीकों को लागू करने वाला पूर्ण स्रोत कोड और वह जो उपलब्ध नहीं है a गिटहब रिपॉजिटरी.
TensorFlow को स्थापित करना और आयात करना
के माध्यम से पालन करने के लिए, आपके पास एक होना चाहिए पायथन की बुनियादी समझ. आपको मशीन लर्निंग की बेसिक नॉलेज भी होनी चाहिए। यदि आपको एक पुनश्चर्या की आवश्यकता है, तो आप कुछ का अनुसरण करने पर विचार कर सकते हैं मशीन लर्निंग पर ट्यूटोरियल.
खुला गूगल कोलाब. रनटाइम प्रकार को GPU में बदलें। फिर, अपने वातावरण में TensorFlow को स्थापित करने के लिए पहले कोड सेल पर निम्नलिखित मैजिक कमांड को निष्पादित करें।
!पिप टेंसरफ़्लो स्थापित करें
TensorFlow और इससे संबंधित मॉड्यूल और कक्षाएं आयात करें।
आयात tensorflow जैसा tf
से टेंसरफ़्लो.केरस.प्रीप्रोसेसिंग.इमेज आयात इमेजडेटा जेनरेटर
से टेंसरफ़्लो.केरस.मॉडल आयात क्रमबद्ध
से टेंसरफ़्लो.केरस.परतें आयात Conv2D, MaxPooling2D, चपटा, घना, ड्रॉपआउट
टेंसरफ़्लो.केरस.प्रीप्रोसेसिंग.इमेज आपको अपने डेटासेट पर डेटा वृद्धि करने में सक्षम करेगा।
ImageDataGenerator वर्ग के उदाहरण बनाना
का एक उदाहरण बनाएँ इमेजडेटा जेनरेटर ट्रेन डेटा के लिए वर्ग। आप इस ऑब्जेक्ट का उपयोग प्रशिक्षण डेटा को प्रीप्रोसेस करने के लिए करेंगे। यह मॉडल प्रशिक्षण के दौरान वास्तविक समय में संवर्धित छवि डेटा के बैच उत्पन्न करेगा।
यह वर्गीकृत करने के कार्य में कि कोई छवि बिल्ली है या कुत्ता, आप फ़्लिपिंग, यादृच्छिक चौड़ाई, यादृच्छिक ऊँचाई, यादृच्छिक चमक और ज़ूमिंग डेटा वृद्धि तकनीकों का उपयोग कर सकते हैं। ये तकनीकें नया डेटा उत्पन्न करेंगी जिसमें वास्तविक दुनिया के परिदृश्यों का प्रतिनिधित्व करने वाले मूल डेटा की विविधताएं होंगी।
# प्रशिक्षण के लिए छवि डेटा जनरेटर को परिभाषित करें
train_datagen = ImageDataGenerator (पुनरारंभ =1./255,
क्षैतिज_फ्लिप =सत्य,
चौड़ाई_शिफ्ट_रेंज =0.2,
ऊंचाई_शिफ्ट_रेंज =0.2,
चमक_रेंज = [0.2,1.0],
ज़ूम_रेंज =0.2)
का एक और उदाहरण बनाएँ इमेजडेटा जेनरेटर परीक्षण डेटा के लिए वर्ग। आपको इसकी आवश्यकता होगी पुनर्विक्रय पैरामीटर। यह प्रशिक्षण के दौरान उपयोग किए गए प्रारूप से मिलान करने के लिए परीक्षण छवियों के पिक्सेल मूल्यों को सामान्य करेगा।
# परीक्षण के लिए छवि डेटा जनरेटर को परिभाषित करें
test_datagen = ImageDataGenerator (पुनरारंभ =1./255)
का एक अंतिम उदाहरण बनाएँ इमेजडेटा जेनरेटर सत्यापन डेटा के लिए वर्ग। सत्यापन डेटा को परीक्षण डेटा के समान ही पुन: सहेजें।
# सत्यापन के लिए छवि डेटा जनरेटर को परिभाषित करें
Validation_datagen = ImageDataGenerator (पुनर्विक्रय =1./255)
आपको परीक्षण और सत्यापन डेटा में अन्य वृद्धि तकनीकों को लागू करने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि मॉडल केवल मूल्यांकन उद्देश्यों के लिए परीक्षण और सत्यापन डेटा का उपयोग करता है। उन्हें मूल डेटा वितरण को प्रतिबिंबित करना चाहिए।
आपका डेटा लोड हो रहा है
एक बनाने के डायरेक्टरी इटरेटर प्रशिक्षण निर्देशिका से वस्तु। यह संवर्धित छवियों के बैच उत्पन्न करेगा। फिर उस निर्देशिका को निर्दिष्ट करें जो प्रशिक्षण डेटा को संग्रहीत करती है। के एक निश्चित आकार के लिए छवियों का आकार बदलें 64x64 पिक्सल। प्रत्येक बैच द्वारा उपयोग की जाने वाली छवियों की संख्या निर्दिष्ट करें। अंत में, लेबल के प्रकार को निर्दिष्ट करें द्विआधारी (यानी, बिल्ली या कुत्ता)।
# प्रशिक्षण निर्देशिका को परिभाषित करना
train_data = train_datagen.flow_from_directory (निर्देशिका =r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
लक्ष्य_आकार=(64, 64),
बैच_साइज़ =32,
क्लास_मोड ='बाइनरी')
दूसरा बनाओ डायरेक्टरी इटरेटर परीक्षण निर्देशिका से वस्तु। प्रशिक्षण डेटा के समान मानों के लिए पैरामीटर सेट करें।
# परीक्षण निर्देशिका को परिभाषित करना
test_data = test_datagen.flow_from_directory (निर्देशिका ='/सामग्री/ड्राइव/MyDrive/cats_and_dogs_filtered/test',
लक्ष्य_आकार=(64, 64),
बैच_साइज़ =32,
क्लास_मोड ='बाइनरी')
फाइनल बनाएं डायरेक्टरी इटरेटर सत्यापन निर्देशिका से वस्तु। पैरामीटर प्रशिक्षण और परीक्षण डेटा के समान ही रहते हैं।
# सत्यापन निर्देशिका को परिभाषित करना
सत्यापन_डेटा = सत्यापन_डेटाजेन.फ्लो_फ्रॉम_निर्देशिका (निर्देशिका ='/सामग्री/ड्राइव/MyDrive/cats_and_dogs_filtered/सत्यापन',
लक्ष्य_आकार=(64, 64),
बैच_साइज़ =32,
क्लास_मोड ='बाइनरी')
निर्देशिका पुनरावर्तक सत्यापन और परीक्षण डेटासेट में वृद्धि नहीं करते हैं।
अपने मॉडल को परिभाषित करना
अपने तंत्रिका नेटवर्क की वास्तुकला को परिभाषित करें। का उपयोग करो संवादात्मक तंत्रिका नेटवर्क (सीएनएन)। सीएनएन को छवियों में पैटर्न और सुविधाओं को पहचानने के लिए डिज़ाइन किया गया है।
मॉडल = अनुक्रमिक ()
# 3x3 आकार के 32 फिल्टर के साथ दृढ़ परत
मॉडल.ऐड (रूपा2डी(32, (3, 3), सक्रियण ='रेलु', इनपुट_शेप = (64, 64, 3)))# पूल आकार 2x2 के साथ अधिकतम पूलिंग परत
model.add (MaxPooling2D(pool_size=(2, 2)))# 3x3 आकार के 64 फिल्टर के साथ दृढ़ परत
मॉडल.ऐड (रूपा2डी(64, (3, 3), सक्रियण ='रेलु'))# पूल आकार 2x2 के साथ अधिकतम पूलिंग परत
model.add (MaxPooling2D(pool_size=(2, 2)))# कन्वेन्शनल और पूलिंग लेयर्स से आउटपुट को समतल करें
model.add (चपटा ())# 128 इकाइयों और ReLU सक्रियण के साथ पूरी तरह से जुड़ी हुई परत
मॉडल.एड (घना (128, सक्रियण ='रेलु'))# ओवरफिटिंग को रोकने के लिए 50% इकाइयों को बेतरतीब ढंग से छोड़ दें
मॉडल.एड (ड्रॉपआउट (0.5))
# सिग्मॉइड सक्रियण (बाइनरी वर्गीकरण) के साथ आउटपुट परत
मॉडल.एड (घना (1, सक्रियण ='अवग्रह'))
बाइनरी का उपयोग कर मॉडल को संकलित करें क्रोस एंट्रोपी लॉस फंकशन। बाइनरी वर्गीकरण समस्याएं आमतौर पर इसका इस्तेमाल करती हैं। ऑप्टिमाइज़र के लिए, का उपयोग करें एडम ऑप्टिमाइज़र. यह एक अनुकूली सीखने की दर अनुकूलन एल्गोरिथम है। अंत में, सटीकता के संदर्भ में मॉडल का मूल्यांकन करें।
मॉडल.कंपाइल (नुकसान ='बाइनरी_क्रॉसेंट्रॉपी', अनुकूलक ='एडम'मेट्रिक्स = ['शुद्धता'])
कंसोल पर मॉडल के आर्किटेक्चर का सारांश प्रिंट करें।
मॉडल.सारांश ()
निम्न स्क्रीनशॉट मॉडल आर्किटेक्चर के विज़ुअलाइज़ेशन को दिखाता है।
यह आपको एक अवलोकन देता है कि आपका मॉडल डिज़ाइन कैसा दिखता है।
अपने मॉडल का प्रशिक्षण
का उपयोग करके मॉडल को प्रशिक्षित करें उपयुक्त() तरीका। द्वारा विभाजित प्रशिक्षण नमूनों की संख्या होने के लिए प्रति युग चरणों की संख्या निर्धारित करें बैच का आकार. साथ ही, सत्यापन डेटा और सत्यापन चरणों की संख्या सेट करें।
# प्रशिक्षण डेटा पर मॉडल को प्रशिक्षित करें
इतिहास = मॉडल.फिट (ट्रेन_डाटा,
steps_per_epoch=train_data.n // train_data.batch_size,
युग =50,
सत्यापन_डेटा = सत्यापन_डेटा,
Validation_steps=validation_data.n // Validation_data.batch_size)
इमेजडेटा जेनरेटर कक्षा वास्तविक समय में प्रशिक्षण डेटा में डेटा वृद्धि लागू करती है। यह मॉडल की प्रशिक्षण प्रक्रिया को धीमा कर देता है।
अपने मॉडल का मूल्यांकन
का उपयोग करके परीक्षण डेटा पर अपने मॉडल के प्रदर्शन का मूल्यांकन करें मूल्यांकन करना() तरीका। इसके अलावा, परीक्षण हानि और सटीकता को कंसोल पर प्रिंट करें।
test_loss, test_acc = model.evaluate (test_data,
कदम = test_data.n // test_data.batch_size)
प्रिंट (एफ टेस्ट नुकसान: {test_loss}')
प्रिंट (एफ परीक्षण सटीकता: {test_acc}')
निम्न स्क्रीनशॉट मॉडल के प्रदर्शन को दर्शाता है।
मॉडल कभी न देखे गए डेटा पर काफी अच्छा प्रदर्शन करता है।
जब आप कोड चलाते हैं जो डेटा वृद्धि तकनीकों को लागू नहीं करता है, तो मॉडल प्रशिक्षण सटीकता 1 है। यानी यह ओवरफिट हो जाता है। यह पहले कभी नहीं देखे गए डेटा पर भी खराब प्रदर्शन करता है। ऐसा इसलिए है क्योंकि यह डेटासेट की ख़ासियत को सीखता है।
डेटा ऑग्मेंटेशन कब मददगार नहीं होता है?
- जब डेटासेट पहले से ही विविध और बड़ा हो: डेटा संवर्द्धन डेटासेट के आकार और विविधता को बढ़ाता है। यदि डेटासेट पहले से ही बड़ा और विविध है, तो डेटा वृद्धि उपयोगी नहीं होगी।
- जब डेटासेट बहुत छोटा हो: डेटा संवर्द्धन नई सुविधाएँ नहीं बना सकता है जो मूल डेटासेट में मौजूद नहीं हैं। इसलिए, यह एक छोटे डेटासेट के लिए क्षतिपूर्ति नहीं कर सकता है जिसमें अधिकांश सुविधाओं की कमी होती है जिसे मॉडल को सीखने की आवश्यकता होती है।
- जब डेटा वृद्धि का प्रकार अनुपयुक्त हो: उदाहरण के लिए, छवियों को घुमाना सहायक नहीं हो सकता है जहाँ वस्तुओं का उन्मुखीकरण महत्वपूर्ण है।
TensorFlow क्या करने में सक्षम है
TensorFlow एक विविध और शक्तिशाली पुस्तकालय है। यह जटिल डीप लर्निंग मॉडल को प्रशिक्षित करने में सक्षम है और स्मार्टफोन से लेकर सर्वर के क्लस्टर तक कई उपकरणों पर चल सकता है। इसने मशीन लर्निंग का उपयोग करने वाले पावर एज कंप्यूटिंग डिवाइसों की मदद की है।