ओवर-न्यूटिंग नेटवर्क। ड्रॉपआउट मदद नहीं कर रहा है


16

मैं काफिले के साथ थोड़ा खेल रहा हूं। विशेष रूप से, मैं कागले बिल्लियों-बनाम-कुत्तों के डेटासेट का उपयोग कर रहा हूं, जिसमें 25000 छवियां शामिल हैं, जिन्हें या तो बिल्ली या कुत्ते (12500 प्रत्येक) के रूप में लेबल किया गया है।

मैं अपने परीक्षण सेट पर लगभग 85% वर्गीकरण सटीकता प्राप्त करने में कामयाब रहा, हालांकि मैंने 90% सटीकता प्राप्त करने का लक्ष्य निर्धारित किया है।

मेरी मुख्य समस्या ओवरफिटिंग है। किसी तरह यह हमेशा समाप्त होता है (सामान्य रूप से 8-10 के बाद)। मेरे नेटवर्क का आर्किटेक्चर -16 द्वारा शिथिल रूप से प्रेरित है, विशेष रूप से मेरी छवियां आकार की हैं , और फिर मैं चलाता हूं:128एक्स128एक्स3

Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool    1 64x64x32   (kernel size is 2, strides is 2)
Convolution 3 64x64x64   (kernel size is 3, strides is 1)
Convolution 4 64x64x64   (kernel size is 3, strides is 1)
Max pool    2 32x32x64   (kernel size is 2, strides is 2)
Convolution 5 16x16x128  (kernel size is 3, strides is 1)
Convolution 6 16x16x128  (kernel size is 3, strides is 1)
Max pool    3 8x8x128    (kernel size is 2, strides is 2)
Convolution 7 8x8x256    (kernel size is 3, strides is 1)
Max pool    4 4x4x256    (kernel size is 2, strides is 2)
Convolution 8 4x4x512    (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)

पिछले एक को छोड़कर सभी परतें सक्रियण कार्यों के रूप में स्थानांतरित होती हैं।

ध्यान दें कि मैंने विभिन्न संयोजनों के संयोजनों की कोशिश की है (मैंने सरल संकल्पों के साथ शुरुआत की)।

इसके अलावा, मैंने छवियों को मिरर करके डेटासेट को संवर्धित किया है, ताकि कुल मिलाकर मेरे पास 50000 छवियां हों।

इसके अलावा, मैं न्यूनतम अधिकतम सामान्यीकरण का उपयोग करके छवियों को सामान्य कर रहा हूं, जहां एक्स छवि है

एक्स=एक्स-0/255-0

कोड को टेंसरफ़्लो में लिखा गया है और बैच का आकार 128 है।

प्रशिक्षण डेटा के मिनी-बैच समाप्त हो जाते हैं और इसकी सटीकता 100% होती है जबकि सत्यापन डेटा लगभग 84-85% पर सीखना बंद कर देता है।

मैंने ड्रॉपआउट दर को बढ़ाने / घटाने का भी प्रयास किया है।

उपयोग किया जा रहा अनुकूलक 0.0001 सीखने की दर के साथ एडमऑप्टिमाइज़र है

फिलहाल मैं पिछले 3 हफ्तों से इस समस्या से खेल रहा हूं और 85% ने मेरे सामने एक बाधा खड़ी कर दी है।

रिकॉर्ड के लिए, मुझे पता है कि मैं बहुत अधिक परिणाम प्राप्त करने के लिए ट्रांसफर लर्निंग का उपयोग कर सकता हूं, लेकिन मैं इस नेटवर्क को स्वयं-सीखने के अनुभव के रूप में बनाने पर दिलचस्प हूं।

अपडेट करें:

मैं एक अलग बैच आकार के साथ SAME नेटवर्क चला रहा हूं, इस मामले में मैं बहुत छोटे बैच आकार (128 के बजाय 16) का उपयोग कर रहा हूं अब तक मैं 87.5% सटीकता (85% के बजाय) प्राप्त कर रहा हूं। उस ने कहा, नेटवर्क वैसे भी खत्म हो जाता है। फिर भी मुझे समझ में नहीं आ रहा है कि 50% इकाइयों की एक बूंद कैसे मदद नहीं कर रही है ... जाहिर है कि मैं यहां कुछ गलत कर रहा हूं। कोई विचार?

अपडेट 2:

ऐसा लगता है कि समस्या को बैच आकार के साथ करना था, जैसा कि एक छोटे आकार (128 के बजाय 16) के साथ मैं अपने परीक्षण सेट पर अब 92.8% सटीकता प्राप्त कर रहा हूं, छोटे बैच आकार के साथ नेटवर्क अभी भी ओवरफिट करता है (मिनी बैच समाप्त होता है) 100% की सटीकता के साथ) हालांकि, नुकसान (त्रुटि) कम हो रहा है और यह सामान्य रूप से अधिक स्थिर है। विपक्ष एक बहुत धीमी गति से चलने वाला समय है, लेकिन यह पूरी तरह से इंतजार के लायक है।


2
क्या आप ओवर-फिटिंग के अपने मूल्यांकन के बारे में अधिक जानकारी दे सकते हैं? उदाहरण के लिए, मान्यता सटीकता करता ड्रॉप किसी भी बिंदु पर, प्रशिक्षण और मान्यता परिणामों से विचलन के साथ? कैसे नुकसान समारोह के बारे में?
नील स्लेटर

अच्छा सवाल है, इसलिए ओवरफिटिंग से मेरा मतलब है कि ट्रेन में मिनी-बैच 100% की सटीकता और 0.08 के नुकसान को प्राप्त करते हैं जबकि सत्यापन कभी भी 0.35 से कम नहीं लगता है और इसकी सटीकता 88% पर बनी हुई है। मान्यता के अनुसार यह कम से कम नहीं लगता है (कम से कम बहुत अधिक नहीं), सपाट हो गया लगता है, हालांकि मिनी बैच कैसे इतने कम नुकसान को प्राप्त करता है जबकि सत्यापन अभी भी इससे दूर है?
जुआन एंटोनियो गोमेज़ मोरियानो

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

"फिर भी मुझे समझ नहीं आ रहा है कि 50% इकाइयों की एक ड्रॉपआउट कैसे मदद नहीं कर रही है" मैंने लोगों को सफलता के साथ ड्रॉपआउट के उच्च मूल्यों का उपयोग करते हुए देखा है।
रिकार्डो क्रूज़

जवाबों:


14

ठीक है, इसलिए बहुत प्रयोग के बाद मैं कुछ परिणाम / अंतर्दृष्टि प्राप्त करने में कामयाब रहा।

पहली जगह में, प्रशिक्षण सेट में छोटे बैचों के बराबर, सब कुछ नेटवर्क के सामान्य प्रदर्शन को बढ़ाने के लिए बहुत मदद करता है, एक नकारात्मक पक्ष के रूप में, प्रशिक्षण प्रक्रिया धीमी गति से धीमी होती है।

दूसरा बिंदु, डेटा महत्वपूर्ण है, यहां कुछ भी नया नहीं है लेकिन जैसा कि मैंने इस समस्या से लड़ते हुए सीखा, अधिक डेटा हमेशा थोड़ा मदद करने के लिए लगता है।

तीसरा बिंदु, ड्रॉपआउट बड़े नेटवर्क में बहुत सारे डेटा और पुनरावृत्तियों के साथ उपयोगी है, मेरे नेटवर्क में मैंने अंतिम पूर्ण रूप से कनेक्ट की गई परतों पर केवल ड्रॉपआउट लागू किया, सजा परतों को ड्रॉपआउट लागू नहीं किया गया।

चौथा बिंदु (और यह कुछ ऐसा है जिसे मैं बार-बार सीख रहा हूं): तंत्रिका नेटवर्क्स ए लोट को प्रशिक्षित करने के लिए ले जाते हैं, यहां तक ​​कि अच्छे जीपीयू पर भी (मैंने फ्लोयडहब पर इस नेटवर्क को प्रशिक्षित किया है, जो काफी महंगे NVIDIA कार्ड का उपयोग करता है), इसलिए पैटनस की कुंजी है

अंतिम निष्कर्ष: बैच आकार अधिक महत्वपूर्ण है कि कोई सोच सकता है, जाहिरा तौर पर एक स्थानीय न्यूनतम हिट करना आसान होता है जब बैच बड़े होते हैं।

मेरे द्वारा लिखा गया कोड एक पायथन नोटबुक के रूप में उपलब्ध है, मुझे लगता है कि यह शालीनता से प्रलेखित है

https://github.com/moriano/loco-learning/blob/master/cats-vs-dogs/cats-vs-dogs.ipynb


अपने निष्कर्षों को पोस्ट करने के लिए धन्यवाद। त्वरित प्रश्न: मैं इसी तरह के मुद्दे का सामना कर रहा हूं और मैंने इसे आपके द्वारा पोस्ट की गई नोटबुक में देखा है NOTE USE EITHER mean centering or min-max, NOT BOTH:। मैं वर्तमान में मेरे input_fn(टेंसरफ़्लो एस्टिमेटर एपीआई) के अंदर अपनी इनपुट छवियों को 255 से विभाजित कर रहा हूं । फिर, मॉडल के अंदर, मैं बैच इनपुट के माध्यम से उस इनपुट को चला रहा हूं। क्या मुझे अभी भी उन सामान्यीकरणों में से एक करना चाहिए? देखें github.com/formigone/tf-imagenet/blob/master/models/…
rodrigo-silveira

मेरी समझ, जो 255 से विभाजित होती है, प्रत्येक छवि के लिए केवल एक बार किया जाता है, और इसका कारण यह है कि सभी मानों को 0 और 1 के बीच रखना है क्योंकि यह संख्यात्मक स्थिरता प्रदान करेगा।
जुआन एंटोनियो गोमेज़ मोरियानो

ज़रूर, मुझे लगता है कि मिल लेकिन क्या आपको लगता है कि यह उन मूल्यों को भी सीमित करने के लिए समझ में आता है [0, 1]?
रॉडरिगो-सिल्वेरा

कि, मुझे नहीं पता, जब से मैंने बैच के सामान्यीकरण का इस्तेमाल किया है, तब से यह एक समय हो गया है :)
जुआन एंटोनियो गोमेज़ मोरियानो

3

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


सलाह के लिए धन्यवाद, इसे आज़माएंगे, मैं हालांकि इस धारणा के तहत था कि CONV परतों को ड्रॉपआउट की आवश्यकता नहीं है, मेरे द्वारा पढ़े गए अधिकांश कागजों पर, ड्रॉपआउट हमेशा अंत में पूरी तरह से जुड़े परतों पर लागू होता है, न कि कनफ़्लिंस के लिए।
जुआन एंटोनियो गोमेज़ मोरियानो

3

आपकी समस्या के लिए कई संभावित समाधान हैं।

  1. ड्रॉपआउट का उपयोग पहले की परतों (संकेंद्रित परतों) में भी करें।

  2. आपका नेटवर्क किसी भी तरह से इस तरह के "आसान" कार्य के लिए काफी बड़ा लगता है; इसे कम करने की कोशिश करें। बड़े आर्किटेक्चर भी बहुत बड़े डेटासेट पर प्रशिक्षित होते हैं।

यदि आप अपना "बड़ा" आर्किटेक्चर आजमाना चाहते हैं:

  1. वस्तुतः अपने प्रशिक्षण डेटा को बढ़ाने के लिए छवि वृद्धि

  2. प्रतिकूल प्रशिक्षण का प्रयास करें। यह कभी-कभी मदद करता है।


"आपका नेटवर्क इस तरह के" आसान "कार्य के लिए किसी तरह काफी बड़ा लगता है; इसे कम करने की कोशिश करें। बड़े आर्किटेक्चर भी कुछ बड़े डेटासेट पर प्रशिक्षित होते हैं।" मैं असहमत हूं, जैसा कि मैंने और अधिक दृढ़ संकल्पों को जोड़ा, सटीकता में वृद्धि हुई (शुरू में मैं सिर्फ दो संकल्पों के साथ 68% प्राप्त कर रहा था)। इसके अलावा, मैं पहले से ही अपने डेटासेट में वृद्धि कर रहा हूं, मैं 50000 छवियों के साथ काम करता हूं।
जुआन एंटोनियो गोमेज़ मोरियानो

2

एक चीज जिसका अभी तक उल्लेख नहीं किया गया है और वह है कि आप भविष्य के लिए विचार कर सकते हैं: आप अभी भी पूरी तरह से जुड़े परतों में अपने ड्रॉपआउट को बढ़ा सकते हैं।

मैंने एक बार एक पेपर पढ़ा जिसमें 90% ड्रॉपआउट दर का उपयोग किया गया था। यद्यपि इसमें कई नोड्स थे (2048 यदि मैं सही ढंग से याद करता हूं), तो मैंने खुद को कम नोड्स वाली परतों पर आजमाया है और यह कुछ मामलों में बहुत मददगार था।

मैंने अभी देखा कि यह कौन सा पेपर था। मुझे याद नहीं आ रहा है कि मुझे कौन सा पेपर याद है लेकिन मैंने पाया कि 90% ड्रॉपआउट दरों के साथ कुछ सफलता भी मिली।

करपाथी, ए।, टोडेरिसी, जी।, शेट्टी, एस।, लेउंग, टी।, सुथंकर, आर।, और फी-फी, एल। (2014)। बड़े पैमाने पर वीडियो तंत्रिका नेटवर्क के साथ वर्गीकरण। कंप्यूटर विजन और पैटर्न मान्यता पर IEEE सम्मेलन की कार्यवाही में (पीपी। 1725-1732)।

सिमोनियन, के।, और ज़िसरमैन, ए। (2014)। वीडियो में कार्रवाई की मान्यता के लिए दो-धारा वाला दृढ़ नेटवर्क। तंत्रिका सूचना प्रसंस्करण प्रणालियों में अग्रिम (पीपी। 568-576)।

वारोल, जी।, लपटेव, आई।, और श्मिट, सी। (2017)। कार्रवाई मान्यता के लिए दीर्घकालिक लौकिक संकल्प। पैटर्न एनालिसिस और मशीन इंटेलिजेंस पर आईईईई लेनदेन।


0

मुझे यह समस्या भी हुई। घंटों तक इसके साथ डुबकी लगाने के बाद, संयोग से मैंने इसे सिस्टम और वॉइला में फीड करने से पहले डेटा में फेरबदल करने का फैसला किया, इसने काम करना शुरू कर दिया। मुझे यह पता लगाने में थोड़ा समय लगा कि यह फेरबदल था जिसने चालबाजी की! आशा है कि यह किसी को निराशा से बचाता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.