2016-04-29 30 views
14

मैं Keras (थेनो बैकएंड) का उपयोग कर एक 28x28px छवि अजगर में लिखा से हाथ से लिखा अंक का पता लगाने के लिए एक सरल एनएन मॉडल को समझना अच्छी तरह से चलता है और मुझे ~ 90% सटीकता मिलती है। मैं print(model0.summary()) कर अपने नेटवर्क की संरचना का सारांश प्राप्त करने के लिए निम्न आदेश निष्पादित करता हूं।Keras model.summary() परिणाम पैरामीटर्स की #

Layer (type)   Output Shape Param #  Connected to      
===================================================================== 
flatten_1 (Flatten) (None, 784)  0   flatten_input_1[0][0]    
dense_1 (Dense)  (None, 10)  7850  flatten_1[0][0]     
activation_1  (None, 10)   0   dense_1[0][0]      
====================================================================== 
Total params: 7850 

मुझे समझ नहीं आता कि वे किस तरह 7850 कुल पैरामीटर के लिए मिलता है और है कि क्या वास्तव में अर्थ है: यह निम्नलिखित आउटपुट?

उत्तर

10

y पैरामीटर की संख्या 7850 है क्योंकि प्रत्येक छिपी इकाई के साथ आपके पास 784 इनपुट वजन और पूर्वाग्रह के साथ कनेक्शन का एक भार होता है। इसका मतलब है कि हर छिपी इकाई आपको 785 पैरामीटर देती है।

इस अतिरिक्त पूर्वाग्रह अवधि की भूमिका वास्तव में महत्वपूर्ण है: तो यह करने के लिए 7850.

अद्यतन का सार आप 10 इकाइयां हैं। यह आपके मॉडल की क्षमता में काफी वृद्धि करता है। आप विवरण पढ़ सकते हैं उदा। यहाँ:

Role of Bias in Neural Networks

+0

धन्यवाद! ऐसा क्यों है कि पूर्वाग्रह के साथ कनेक्शन का एक भार है? इसका उद्देश्य क्या है? – user3501476

6

मैं Keras में एक Sequential मॉडल के लिए एक 514 आयामी वास्तविक मूल्य इनपुट फ़ीड। मेरे मॉडल निम्नलिखित तरीके से निर्माण किया है:

predictivemodel = Sequential() 
    predictivemodel.add(Dense(514, input_dim=514, W_regularizer=WeightRegularizer(l1=0.000001,l2=0.000001), init='normal')) 
    predictivemodel.add(Dense(257, W_regularizer=WeightRegularizer(l1=0.000001,l2=0.000001), init='normal')) 
    predictivemodel.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy']) 

जब मैं model.summary() प्रिंट मैं परिणाम के बाद मिलता है:

Layer (type) Output Shape Param #  Connected to     
================================================================ 
dense_1 (Dense) (None, 514) 264710  dense_input_1[0][0]    
________________________________________________________________ 
activation_1 (None, 514) 0   dense_1[0][0]      
________________________________________________________________ 
dense_2 (Dense) (None, 257) 132355  activation_1[0][0]    
================================================================ 
Total params: 397065 
________________________________________________________________ 

dense_1 परत के लिए, पैरामीटर की संख्या 264710. इस रूप में प्राप्त किया जाता है: 514 (इनपुट मान) * 514 (पहली परत में न्यूरॉन्स) + 514 (पूर्वाग्रह मूल्य)

घने 2 परत के लिए, पैराम की संख्या 132355 है। यह प्राप्त होता है: 514 (इनपुट मान) * 257 (दूसरी परत में न्यूरॉन्स) + 257 (दूसरी परत में न्यूरॉन्स के लिए पूर्वाग्रह मान)

0

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

प्रत्येक परत से जुड़ा नोड्स के लिए, आप निम्न कर सकते हैं:

for layer in model.layers: 
    print(layer.name, layer.inbound_nodes, layer.outbound_nodes) 
0

सबसे आसान एक परत में न्यूरॉन्स की संख्या की गणना करने के तरीका है: परम मूल्य/(इकाइयों की संख्या * 4)

  • इकाइयों की संख्या (predictivemodel.add में है घने (514, ...)() फ़ंक्शन
  • परम मूल्य model.summary में परम है

उदाहरण के लिए Paul Lo के उत्तर में, एक परत में न्यूरॉन्स की संख्या 264710/(514 * 4) = 130

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