एक पूर्व प्रशिक्षित CNN क्लासिफायर का उपयोग करना और इसे एक अलग छवि डेटासेट पर लागू करना


11

आप कैसे हैं अनुकूलन एक पूर्व प्रशिक्षित neural network एक अलग समस्या पर लागू करने का? क्या आप पहले से प्रशिक्षित मॉडल में अधिक परतें जोड़ेंगे और अपने डेटा सेट पर इसका परीक्षण करेंगे?

उदाहरण के लिए, यदि कार्य वॉलपेपर समूहों को वर्गीकृत करने के लिए सीएनएन का उपयोग करना था, तो मुझे यकीन है कि यह छवि बिल्लियों और कुत्तों पर प्रशिक्षित पूर्व-प्रशिक्षित नेटवर्क को सीधे वर्गीकृत करने के लिए काम नहीं करेगा , भले ही दोनों छवि क्लासीफायर हैं।

जवाबों:


15

डू रीड - जब ट्रांसफर लर्निंग डिसआर्डर है? (@Media के लिए धन्यवाद) (मेरे लिए बहुत जानकारीपूर्ण लगता है, इसलिए इस उत्तर को पूर्ण बनाने के लिए यहां जोड़ा गया है ...)

आपके प्रश्न का उत्तर .. (यहाँ से शुरू होता है)

ट्रांसफर लर्निंग क्या आप के लिए देख रहे हैं ..

  • जब हमें एक डीप लर्निंग टास्क दिया जाता है, तो कहें, कि छवियों के डेटासेट पर एक कन्वर्सेशनल न्यूरल नेटवर्क (कोवनेट) का प्रशिक्षण शामिल है, हमारी पहली वृत्ति खरोंच से नेटवर्क को प्रशिक्षित करने की होगी। हालांकि, व्यवहार में, कोवनेट जैसे गहरे तंत्रिका नेटवर्क में मापदंडों की एक बड़ी संख्या है, अक्सर लाखों की सीमा में। एक छोटे डेटासेट पर एक कोवनेट को प्रशिक्षित करना (एक जो मापदंडों की संख्या से छोटा है) कोवनेट की सामान्यीकरण करने की क्षमता को बहुत प्रभावित करता है, जिसके परिणामस्वरूप अक्सर ओवरफिटिंग होती है।

  • इसलिए, अधिक बार व्यवहार में, एक मौजूदा नेटवर्क को फाइन ट्यून करेगा जो कि एक बड़े डेटासेट पर प्रशिक्षित होता है जैसे कि इमेजनेट (1.2M लेबल इमेजेज) जो कि हमारे पास मौजूद छोटे डेटासेट पर (यानी बैक-प्रोपगेशन चलाकर) इसे जारी रखते हैं। बशर्ते कि हमारा डेटासेट मूल डेटासेट (जैसे ImageNet) के संदर्भ में बहुत भिन्न नहीं है, पहले से प्रशिक्षित मॉडल में पहले से ही सीखी गई विशेषताएं होंगी जो हमारी अपनी वर्गीकरण समस्या के लिए प्रासंगिक हैं।

कब ठीक करें मॉडल?

  • सामान्य तौर पर, यदि हमारे डेटासेट में डेटासेट के संदर्भ में बहुत भिन्नता नहीं है, जिस पर पूर्व-प्रशिक्षित मॉडल प्रशिक्षित है, तो हमें फाइन-ट्यूनिंग के लिए जाना चाहिए। ImageNet जैसे एक बड़े और विविध डेटासेट पर पूर्व-प्रशिक्षित नेटवर्क अपनी प्रारंभिक परतों में घटता और किनारों जैसी सार्वभौमिक सुविधाओं को कैप्चर करता है, जो वर्गीकरण की अधिकांश समस्याओं के लिए प्रासंगिक और उपयोगी हैं।

  • बेशक, अगर हमारे डेटासेट कुछ बहुत विशिष्ट डोमेन का प्रतिनिधित्व करते हैं, उदाहरण के लिए, चिकित्सा छवियों या चीनी हस्तलिखित पात्रों, और इस तरह के डोमेन पर कोई पूर्व-प्रशिक्षित नेटवर्क नहीं मिल सकता है, तो हमें तब नेटवर्क को खरोंच से प्रशिक्षित करने पर विचार करना चाहिए।

  • एक अन्य चिंता यह है कि यदि हमारा डेटासेट छोटा है, तो छोटे डेटासेट पर पहले से प्रशिक्षित नेटवर्क को ठीक-ठीक ट्यूनिंग करने से ओवरफिटिंग हो सकती है, खासकर अगर नेटवर्क की अंतिम कुछ परतें पूरी तरह से कनेक्टेड लेयर्स हैं, जैसा कि वीजीजी नेटवर्क के मामले में है। मेरे अनुभव से बोलते हुए, यदि हमारे पास कुछ हजार कच्चे नमूने हैं, तो सामान्य डेटा वृद्धि रणनीतियों (अनुवाद, रोटेशन, फ़्लिपिंग, आदि) के साथ, ठीक-ट्यूनिंग आमतौर पर हमें एक बेहतर परिणाम देगा।

  • यदि हमारा डेटासेट वास्तव में छोटा है, तो एक हजार से कम नमूनों का कहना है, एक बेहतर तरीका यह है कि मध्यवर्ती परत का उत्पादन पूरी तरह से जुड़े परतों से पहले सुविधाओं (अड़चन सुविधाओं) के रूप में किया जाए और एक रैखिक क्लासिफायरियर (उदाहरण के लिए SVM) को प्रशिक्षित किया जाए। यह। एसवीएम विशेष रूप से एक छोटी सी डेटासेट पर निर्णय सीमाएँ बनाने में अच्छा है।

फाइन-ट्यूनिंग तकनीक

ठीक-ठीक कार्यान्वयन के लिए कुछ सामान्य दिशानिर्देश नीचे दिए गए हैं:

  • सामान्य अभ्यास पूर्व-प्रशिक्षित नेटवर्क की अंतिम परत (सॉफ्टमैक्स परत) को अलग करना है और इसे हमारी नई सॉफ्टमैक्स परत के साथ बदलना है जो हमारी अपनी समस्या के लिए प्रासंगिक हैं। उदाहरण के लिए, ImageNet पर पूर्व-प्रशिक्षित नेटवर्क 1000 श्रेणियों के साथ सॉफ्टमैक्स परत के साथ आता है।

  • यदि हमारा कार्य 10 श्रेणियों पर वर्गीकरण है, तो नेटवर्क की नई सॉफ्टमैक्स परत 1000 श्रेणियों के बजाय 10 श्रेणियों की होगी। फिर हम पूर्व प्रशिक्षित भार को ठीक करने के लिए नेटवर्क पर वापस प्रसार चलाते हैं। सुनिश्चित करें कि क्रॉस सत्यापन किया जाता है ताकि नेटवर्क अच्छी तरह से सामान्यीकरण करने में सक्षम हो।

  • नेटवर्क को प्रशिक्षित करने के लिए एक छोटी सी सीखने की दर का उपयोग करें। चूँकि हम बेतरतीब ढंग से आरंभिक वज़न की तुलना में पहले से प्रशिक्षित वज़न काफी अच्छे होने की उम्मीद करते हैं, इसलिए हम उन्हें बहुत जल्दी और बहुत अधिक विकृत नहीं करना चाहते हैं। एक सामान्य अभ्यास प्रारंभिक प्रशिक्षण दर को खरोंच प्रशिक्षण के लिए उपयोग किए जाने वाले की तुलना में 10 गुना छोटा करना है।

  • पूर्व प्रशिक्षित नेटवर्क की पहली कुछ परतों के भार को मुक्त करने के लिए यह एक आम बात है। ऐसा इसलिए है क्योंकि पहली कुछ परतें घटता और किनारों जैसी सार्वभौमिक विशेषताओं को पकड़ती हैं जो हमारी नई समस्या के लिए भी प्रासंगिक हैं। हम उन भारों को बरकरार रखना चाहते हैं। इसके बजाय, हमें बाद की परतों में डेटासेट-विशिष्ट सुविधाओं को सीखने पर ध्यान केंद्रित करने के लिए नेटवर्क मिलेगा।

आपको उन्हें इस मामले में फिर से प्रशिक्षित करने की आवश्यकता है जैसे कि अगर मैं गलत नहीं हूं तो वॉलपेपर छवि-शुद्ध मॉडल का वर्ग नहीं है .. ऐसा करने के लिए एक मॉडल को खरोंच से बनाना मुश्किल नहीं होगा (अधिमानतः एक shallower एक होगा) यहां भी करें ..)

मेरे उत्तर का स्रोत इन अद्भुत पाठ्यक्रमों से अनुवाद है।

आगे पढ़ने के लिए,


यदि आप केवल सुविधा निष्कर्षण कर रहे हैं, जैसा कि किसी भी परत को ठीक करने में नहीं। क्या एक रैखिक क्लासिफायरियर के साथ अंतिम घने परत को बदलने का एक कारण है? क्यों न इसे एक नई घनी परत के रूप में रखा जाए, और सभी निचली परतों को जमे रहने के दौरान सिर्फ पीछे छोड़ दिया जाए? क्या यह सिर्फ इसलिए है क्योंकि एक रेखीय क्लासिफायरियर का प्रशिक्षण एक नई घने परत के प्रशिक्षण से तेज होगा?
CMCDragonkai

1
सुविधा निष्कर्षण के लिए, परत को जोड़ने की कोई आवश्यकता नहीं है, लेकिन पूलिंग और आकार आकार बदलने जैसी कुछ परतों को मंदकों से मेल करने और संभवतः मध्यवर्ती मूल्यों को कम करने के लिए जोड़ा जाता है; निश्चित रूप से यह एनएन की तुलना में एक रैखिक मॉडल को प्रशिक्षित करने के लिए तेज़ है, लेकिन आप दोनों की कोशिश कर सकते हैं और देख सकते हैं कि आपके उपयोग के मामले के लिए सबसे अच्छा क्या काम करता है; अंतिम घने परत को अनफ्रीज करें और हाथ में अपनी समस्या से मेल खाने के लिए कुछ अतिरिक्त परतों के साथ फिर से काम करना एक सामान्य अभ्यास है
आदित्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.