5

आलसी कनवॉल्यूशनल तंत्रिका नेटवर्क को कैसे रोकें? मैं केरास के साथ प्रशिक्षण के बाद एक 'आलसी सीएनएन' के साथ समाप्त होता हूं। इनपुट जो भी हो, आउटपुट स्थिर है। आप को क्या लगता है कि समस्या क्या है?आलसी कनवॉल्यूशनल तंत्रिका नेटवर्क को कैसे रोकें?

मैं स्व-ड्राइविंग कारों the paper के लिए एनवीआईडीआईए एंड एंड एंड लर्निंग एंड लर्निंग के प्रयोग को दोहराने का प्रयास करता हूं। बिल्कुल, मेरे पास असली कार नहीं है लेकिन एक उदारता simulator है। सिम्युलेटर एक कार के अग्रभूमि के बारे में आंकड़े उत्पन्न करता है।

enter image description here

एक सीएनएन आंकड़ा प्राप्त करता है, और यह ट्रैक में कार रखने के लिए स्टीयरिंग कोण देता है। गेम का नियम नकली कार को ट्रैक में सुरक्षित रूप से चलाना है। यह बहुत मुश्किल नहीं है।

अजीब चीज कभी-कभी मैं केरास के साथ प्रशिक्षण के बाद आलसी सीएनएन के साथ समाप्त होती हूं, जो निरंतर स्टीयरिंग कोण देता है। नकली कार चाल से निकल जाएगी, लेकिन सीएनएन के आउटपुट में कोई बदलाव नहीं है। विशेष रूप से परत गहरी हो जाती है, उदा। the paper में सीएनएन।

यदि मैं इस तरह सीएनएन का उपयोग करता हूं, तो मुझे प्रशिक्षण के बाद एक उपयोगी मॉडल मिल सकता है।

model = Sequential() 
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3))) 
model.add(Cropping2D(cropping=((70,25),(0,0)))) 
model.add(Conv2D(24, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Conv2D(36, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Conv2D(48, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Flatten()) 
model.add(Dense(50)) 
model.add(Activation('sigmoid')) 
model.add(Dense(10)) 
model.add(Activation('sigmoid')) 
model.add(Dense(1)) 

लेकिन, अगर मैं एक गहरी सीएनएन का उपयोग करता हूं, तो मुझे आलसी सीएनएन प्राप्त करने का अधिक मौका मिलता है। विशेष रूप से, यदि मैं एक सीएनएन का उपयोग करता हूं जो एनवीआईडीआईए पसंद करता है, तो मुझे लगभग हर प्रशिक्षण के बाद आलसी सीएनएन प्राप्त होता है।

model = Sequential() 
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3))) 
model.add(Cropping2D(cropping=((70,25),(0,0)))) 
model.add(Conv2D(24, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Conv2D(36, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Conv2D(48, 5, strides=(2, 2))) 
model.add(Activation('relu')) 
model.add(Conv2D(64, 3, strides=(1, 1))) 
model.add(Activation('relu')) 
model.add(Conv2D(64, 3, strides=(1, 1))) 
model.add(Activation('relu')) 
model.add(Flatten()) 
model.add(Dense(1164)) 
model.add(Activation('sigmoid')) 
model.add(Dense(100)) 
model.add(Activation('sigmoid')) 
model.add(Dense(50)) 
model.add(Activation('sigmoid')) 
model.add(Dense(10)) 
model.add(Activation('sigmoid')) 
model.add(Dense(1)) 

मैं घुमाव के परतों के लिए 'Relu' का उपयोग करें, और पूरी तरह से जुड़ा हुआ परत के लिए सक्रियण समारोह 'अवग्रह' है। मैं सक्रियण समारोह को बदलने की कोशिश करता हूं, लेकिन इसका कोई प्रभाव नहीं है।

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

मेरे विश्लेषण के बारे में आप क्या सोचते हैं? क्या कोई अन्य रणनीति है जिसका मैं उपयोग कर सकता हूं? मैं सोच रहा हूं कि सीएनएन शोध के लंबे इतिहास में इसी तरह की समस्याएं हल हो गई हैं या नहीं।

संसाधन:

संबंधित फ़ाइलें GitHub पर अपलोड किया गया है। आप इन प्रयोगों के साथ पूरे प्रयोग को दोहरा सकते हैं।

+0

संबंधित फाइलें [गिटहब] https://github.com/BlueBirdHouse/CarND-Behavioral-Cloning-P3/ पर अपलोड की गई हैं। आप इन प्रयोगों के साथ पूरे प्रयोग को दोहरा सकते हैं। –

+0

कृपया प्रश्न को अपडेट करने के लिए टिप्पणियों की जगह का उपयोग न करें - इसके बजाय पोस्ट को संपादित करें – desertnaut

उत्तर

1

मैं आपका मॉडल नहीं चला सकता, क्योंकि न तो प्रश्न गिटहब रेपो में डेटा नहीं है। यही कारण है कि मैं अपने जवाब का 9 0% निश्चित हूं।

लेकिन मुझे लगता है कि घने परतों के बाद आपके नेटवर्क की मुख्य समस्या sigmoid सक्रियण फ़ंक्शन है। मुझे लगता है, जब उनमें से केवल दो हैं, तो यह अच्छी तरह से प्रशिक्षित होगा, लेकिन चार बहुत अधिक है।

दुर्भाग्य से, NVIDIA के End to End Learning for Self-Driving Cars कागज यह स्पष्ट रूप से निर्दिष्ट नहीं है, लेकिन इन दिनों डिफ़ॉल्ट सक्रियण नहीं रह गया है sigmoid है (के रूप में यह एक बार गया था), लेकिन reluthis discussion देखें यदि आप रुचि रखते हैं तो ऐसा क्यों है।

model = Sequential() 
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3))) 
model.add(Cropping2D(cropping=((70,25),(0,0)))) 
model.add(Conv2D(24, (5, 5), strides=(2, 2), activation="relu")) 
model.add(Conv2D(36, (5, 5), strides=(2, 2), activation="relu")) 
model.add(Conv2D(48, (5, 5), strides=(2, 2), activation="relu")) 
model.add(Conv2D(64, (3, 3), strides=(1, 1), activation="relu")) 
model.add(Conv2D(64, (3, 3), strides=(1, 1), activation="relu")) 
model.add(Flatten()) 
model.add(Dense(1164, activation="relu")) 
model.add(Dense(100, activation="relu")) 
model.add(Dense(50, activation="relu")) 
model.add(Dense(10, activation="relu")) 
model.add(Dense(1)) 

यह NVIDIA के नेटवर्क वास्तुकला की नकल करता है और गायब हो जाने ढ़ाल से ग्रस्त नहीं है: तो समाधान मैं प्रस्ताव कर रहा हूँ इस मॉडल की कोशिश है।

+0

आपके सुझावों के लिए बहुत बहुत धन्यवाद। मैं इन दिनों एक और दुखद समस्या पर काम कर रहा हूं। कुछ संस्कृति में दूसरों को नजरअंदाज करना बहुत गंभीर है। मैं अनदेखा नहीं कर रहा हूं, लेकिन मेरा छोटा दिमाग इतने सारे संदेशों को संसाधित नहीं कर सकता है। मैं वापस आऊंगा। –

+0

आपका 90% आत्मविश्वास सही है। आलसी कनवॉल्यूशन तंत्रिका नेटवर्क चले गए हैं। धन्यवाद। ऐसा लगता है कि मेरे पास एक गायब ढाल समस्या है। यदि ढाल नेटवर्क से गुज़रने में असमर्थ है, तो अनुकूलक को आलसी सीएनएन की आपूर्ति के माध्यम से नौकरी खत्म करनी होगी! यह संभव है, लेकिन मुझे लगता है कि विस्तृत कारण शोध के लायक है। –

संबंधित मुद्दे