मैं काफिले के साथ थोड़ा खेल रहा हूं। विशेष रूप से, मैं कागले बिल्लियों-बनाम-कुत्तों के डेटासेट का उपयोग कर रहा हूं, जिसमें 25000 छवियां शामिल हैं, जिन्हें या तो बिल्ली या कुत्ते (12500 प्रत्येक) के रूप में लेबल किया गया है।
मैं अपने परीक्षण सेट पर लगभग 85% वर्गीकरण सटीकता प्राप्त करने में कामयाब रहा, हालांकि मैंने 90% सटीकता प्राप्त करने का लक्ष्य निर्धारित किया है।
मेरी मुख्य समस्या ओवरफिटिंग है। किसी तरह यह हमेशा समाप्त होता है (सामान्य रूप से 8-10 के बाद)। मेरे नेटवर्क का आर्किटेक्चर -16 द्वारा शिथिल रूप से प्रेरित है, विशेष रूप से मेरी छवियां आकार की हैं , और फिर मैं चलाता हूं:
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 छवियां हों।
इसके अलावा, मैं न्यूनतम अधिकतम सामान्यीकरण का उपयोग करके छवियों को सामान्य कर रहा हूं, जहां एक्स छवि है
कोड को टेंसरफ़्लो में लिखा गया है और बैच का आकार 128 है।
प्रशिक्षण डेटा के मिनी-बैच समाप्त हो जाते हैं और इसकी सटीकता 100% होती है जबकि सत्यापन डेटा लगभग 84-85% पर सीखना बंद कर देता है।
मैंने ड्रॉपआउट दर को बढ़ाने / घटाने का भी प्रयास किया है।
उपयोग किया जा रहा अनुकूलक 0.0001 सीखने की दर के साथ एडमऑप्टिमाइज़र है
फिलहाल मैं पिछले 3 हफ्तों से इस समस्या से खेल रहा हूं और 85% ने मेरे सामने एक बाधा खड़ी कर दी है।
रिकॉर्ड के लिए, मुझे पता है कि मैं बहुत अधिक परिणाम प्राप्त करने के लिए ट्रांसफर लर्निंग का उपयोग कर सकता हूं, लेकिन मैं इस नेटवर्क को स्वयं-सीखने के अनुभव के रूप में बनाने पर दिलचस्प हूं।
अपडेट करें:
मैं एक अलग बैच आकार के साथ SAME नेटवर्क चला रहा हूं, इस मामले में मैं बहुत छोटे बैच आकार (128 के बजाय 16) का उपयोग कर रहा हूं अब तक मैं 87.5% सटीकता (85% के बजाय) प्राप्त कर रहा हूं। उस ने कहा, नेटवर्क वैसे भी खत्म हो जाता है। फिर भी मुझे समझ में नहीं आ रहा है कि 50% इकाइयों की एक बूंद कैसे मदद नहीं कर रही है ... जाहिर है कि मैं यहां कुछ गलत कर रहा हूं। कोई विचार?
अपडेट 2:
ऐसा लगता है कि समस्या को बैच आकार के साथ करना था, जैसा कि एक छोटे आकार (128 के बजाय 16) के साथ मैं अपने परीक्षण सेट पर अब 92.8% सटीकता प्राप्त कर रहा हूं, छोटे बैच आकार के साथ नेटवर्क अभी भी ओवरफिट करता है (मिनी बैच समाप्त होता है) 100% की सटीकता के साथ) हालांकि, नुकसान (त्रुटि) कम हो रहा है और यह सामान्य रूप से अधिक स्थिर है। विपक्ष एक बहुत धीमी गति से चलने वाला समय है, लेकिन यह पूरी तरह से इंतजार के लायक है।