सिमेंटिक विभाजन के लिए नुकसान समारोह


10

तकनीकी शब्दों के दुरुपयोग के लिए माफी माँगता हूँ। मैं संवेदी तंत्रिका नेटवर्क (CNNs) के माध्यम से सिमेंटिक विभाजन की परियोजना पर काम कर रहा हूं; एनकोडर-डिकोडर प्रकार की वास्तुकला को लागू करने की कोशिश कर रहा है, इसलिए आउटपुट इनपुट के समान आकार है।

आप लेबल कैसे डिज़ाइन करते हैं? क्या नुकसान समारोह एक लागू करना चाहिए? विशेष रूप से भारी वर्ग के असंतुलन की स्थिति में (लेकिन वर्गों के बीच का अनुपात छवि से छवि में परिवर्तनशील है)।

समस्या दो वर्गों (ब्याज और पृष्ठभूमि की वस्तुओं) से संबंधित है। मैं टेनसफ़्लो बैकएंड के साथ केर का उपयोग कर रहा हूं।

अब तक, मैं डिज़ाइन किए गए आउटपुट को इनपुट छवियों के समान आयामों के साथ जा रहा हूं, पिक्सेल-वार लेबलिंग लागू करना। मॉडल की अंतिम परत में या तो सॉफ्टमैक्स सक्रियण होता है (2 वर्गों के लिए), या सिग्मॉइड सक्रियण (संभावना व्यक्त करने के लिए कि पिक्सेल ऑब्जेक्ट्स वर्ग के हैं)। मुझे इस तरह के कार्य के लिए एक उपयुक्त उद्देश्य फ़ंक्शन को डिजाइन करने में परेशानी हो रही है:

function(y_pred,y_true),

Keras के साथ समझौते में ।

कृपया, इसमें शामिल टेंसरों के आयामों के साथ विशिष्ट होने का प्रयास करें (मॉडल का इनपुट / आउटपुट)। किसी भी विचार और सुझाव बहुत सराहना की है। धन्यवाद !


इस arxiv.org/pdf/1511.00561.pdf के बारे में पढ़ें "हम नेटवर्क को प्रशिक्षित करने के उद्देश्य उद्देश्य के रूप में क्रॉस-एन्ट्रापी नुकसान का उपयोग करते हैं।"
मिस पामर

जवाबों:


6

क्रॉस एन्ट्रॉपी निश्चित रूप से जाने का रास्ता है। मैं केरस को नहीं जानता, लेकिन TF के पास यह है: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

इसे सीधे तौर पर लागू करने वाला एक पेपर है: शेम्हेर एट अल द्वारा सिमेंटिक सेगमेंटेशन के लिए पूरी तरह से कन्वेन्शनल नेटवर्क

यू-नेट कागज भी स्थानिक संकल्प के बचने हानि करने के लिए छोड़ कनेक्शन का उपयोग विचार का एक बहुत ही सफल कार्यान्वयन है। आप नेट में इसके कई कार्यान्वयन पा सकते हैं।

मेरे व्यक्तिगत अनुभव से, आप पहले एक साधारण एनकोडर-डिकोडर नेटवर्क के साथ शुरुआत करना चाहते हैं, लेकिन स्ट्राइड्स (या स्ट्राइड्स = 1) का उपयोग नहीं करते हैं, अन्यथा आप बहुत अधिक रिज़ॉल्यूशन खो देते हैं क्योंकि अपसमपिंग सही नहीं है। छोटे कर्नेल आकार के साथ जाएं। मुझे आपके विशिष्ट एप्लिकेशन का पता नहीं है, लेकिन यहां तक ​​कि 2-3 छिपे हुए परत नेटवर्क भी बहुत अच्छे परिणाम देगा। प्रत्येक परत पर 32-64 चैनल का उपयोग करें। सरल, 2 छिपी हुई परतें, 32 चैनल प्रत्येक, 3x3 गुठली, स्ट्राइड = 1 शुरू करें और अपने प्रभाव को देखने के लिए एक अलग तरीके से मापदंडों के साथ प्रयोग करें। रिज़ॉल्यूशन लॉस से बचने के लिए आयामों को हमेशा इनपुट आयाम के बराबर रखें। बाद में आप स्ट्राइड्स और अपसैंपलिंग पर स्विच कर सकते हैं और यू-नेट जैसे विचारों को लागू कर सकते हैं। U- नेट चिकित्सा छवि विभाजन के लिए बहुत अच्छी तरह से काम करता है।

क्लास-इनबैलेंस के लिए https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/ यहां देखें कि अलग-अलग कक्षाओं को वेट करना हैα तथा β मापदंडों।


मैं इस डोमेन का विशेषज्ञ नहीं हूं, लेकिन क्या इस सेटिंग में कक्षाएं अनन्य नहीं होनी चाहिए? यदि हां सॉफ्टमैक्स लॉस बेहतर विकल्प नहीं होगा? Tenorflow.org/api_docs/python/tf/nn/…
हेराल्ड थॉमसन

1
@ हेराल्ड थॉमसन, सेगमेंटेशन एक द्विआधारी समस्या है। कई लोग बाइनरी समस्याओं के लिए सॉफ्टमैक्स का उपयोग करते हैं, लेकिन यह पूरी तरह से अनावश्यक और ओवरकिल है। दो आउटपुट नोड्स होने के बजाय, एक आउटपुट नोड है जो P (y = 1) का प्रतिनिधित्व करता है, फिर क्रॉस-एन्ट्रॉपी का उपयोग करें।
रिकार्डो क्रूज़

2

भारित पासा नुकसान और भारित क्रॉस एंट्रोपी हानि का उपयोग करें। विभाजन के लिए पासा नुकसान बहुत अच्छा है। जिन वज़न के साथ आप शुरू कर सकते हैं, उनकी कक्षा आवृत्तियाँ होनी चाहिए अर्थात 50-100 का नमूना लें, प्रत्येक वर्ग से संबंधित पिक्सेल की औसत संख्या ज्ञात करें और उन कक्षाओं का भार 1 / माध्य बनाएं। आपको पासा अपने आप में लागू करना पड़ सकता है लेकिन यह सरल है। इसके अतिरिक्त आप उलटा पासा नुकसान और फोकल नुकसान में देख सकते हैं


-1

मुझे पहले से अधिक विशिष्ट होने दें, और फिर अधिक सामान्य। अगर मैंने आपको गलत समझा तो मैं माफी मांगता हूं।

मुझे लगता है कि आप एक autoencoder तंत्रिका नेटवर्क की आवश्यकता के बारे में बात कर रहे हैं क्योंकि आपने एनकोड और डिकोड का उल्लेख किया है, और आपने आउटपुट आकार के समान इनपुट आकार का उल्लेख किया है। यदि ऐसा है, तो आपका नुकसान फ़ंक्शन इनपुट वेक्टर को पुन: पेश करने पर आधारित है, फिर भी डेटा को मध्य छिपी परत में एक छोटे वेक्टर में संपीड़ित कर रहा है। विकल्प न्यूनतम औसत वर्ग त्रुटि (प्रतिगमन के लिए) या लॉगलॉस या गर्भपात अनुपात (वर्गीकरण के लिए) प्राप्त करना होगा। हालाँकि, CNNs ऐसी कोई चीज़ नहीं है जिसे मैंने किसी ऑटोकेनोडर में इस्तेमाल करते देखा हो, लेकिन मुझे लगता है कि ऐसा करना संभव और उपयोगी दोनों होगा, ऐसे मामलों में जहाँ अनुवाद के लिए महत्वपूर्ण है, जैसे कि धार और ऑब्जेक्ट का पता लगाना।

आमतौर पर, आप CNN का उल्लेख करने के बाद से एक बहुत ही जटिल मशीन लर्निंग मॉडल का निर्माण करते हैं। सीएनएन और अन्य गहरे शिक्षण मॉडल कुछ सबसे जटिल मशीन लर्निंग मॉडल हैं जो मौजूद हैं।

हालांकि आयाम, लेबल और नुकसान कार्यों को चुनना प्राथमिक मशीन लर्निंग की तरह है। मुझे लगता है कि आप गहरी शिक्षा के साथ अपने सिर पर हो सकते हैं। क्या आपने पहले पुरानी पुरानी मशीन सीखने पर क्लास ली थी?


क्या यह भी आवश्यक है? उदाहरण के लिए, Pixon विधि देखें ।
कार्ल

यह एक वैध दृष्टिकोण है: arxiv.org/pdf/1511.00561.pdf
मिस पामर

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