केरस इनपुट स्पष्टीकरण: input_shape, इकाइयों, बैच_साइज, मंद, आदि


261

किसी भी Keras परत (के लिए Layerवर्ग), कर सकते हैं किसी को बताएं कि किस तरह के बीच अंतर को समझने के लिए input_shape, units, dim, आदि?

उदाहरण के लिए डॉक्टर कहते unitsहैं कि एक परत का आउटपुट आकार निर्दिष्ट करें।

नीचे दिए गए तंत्रिका जाल की छवि hidden layer1में 4 इकाइयां हैं। क्या यह सीधे वस्तु की unitsविशेषता का अनुवाद करता है Layer? या unitsकेरेस में छिपी हुई परत के हर वज़न के आकार को इकाइयों की संख्या के बराबर किया जाता है?

संक्षेप में मॉडल की विशेषताओं को कोई कैसे समझता / कल्पना करता है - विशेष रूप से परतों में - नीचे की छवि के साथ? यहां छवि विवरण दर्ज करें

जवाबों:


412

इकाइयों:

"न्यूरॉन्स", या "कोशिकाएं", या परत के अंदर जो कुछ भी है, उसकी मात्रा।

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

  • छिपी परत 1: 4 इकाइयाँ (4 न्यूरॉन्स)
  • छिपी परत 2: 4 इकाइयाँ
  • अंतिम परत: 1 इकाई

आकृतियाँ

आकृतियाँ मॉडल के कॉन्फ़िगरेशन के परिणाम हैं। आकृतियाँ टुपल्स हैं जो दर्शाती हैं कि प्रत्येक आयाम में एक एरे या टेन्सर के कितने तत्व हैं।

Ex: एक आकृति का (30,4,10)मतलब 3 आयामों के साथ एक सरणी या टेंसर होता है, जिसमें पहले आयाम में 30 तत्व होते हैं, दूसरे में 4 और तीसरे में 10, कुल 30 * 4 * 10 = 1200 तत्व या संख्या।

इनपुट आकार

परतों के बीच प्रवाह क्या हैं दसियों। आकृतियों के साथ सेंसर को मैट्रिस के रूप में देखा जा सकता है।

केरस में, इनपुट परत खुद एक परत नहीं है, बल्कि एक टेंसर है। यह शुरुआती टेंसर है जिसे आप पहली छिपी हुई परत पर भेजते हैं। इस टेंसर का आपके प्रशिक्षण डेटा के समान आकार होना चाहिए।

उदाहरण: यदि आपके पास RGB (3 चैनल) में 50x50 पिक्सेल की 30 छवियां हैं, तो आपके इनपुट डेटा का आकार है (30,50,50,3)। फिर आपके इनपुट लेयर टेन्सर में यह आकृति होनी चाहिए (विवरण "केयर्स में आकार" अनुभाग में विवरण देखें)।

प्रत्येक प्रकार की परत को कुछ निश्चित आयामों के साथ इनपुट की आवश्यकता होती है:

  • Dense परतों को इनपुट की आवश्यकता होती है (batch_size, input_size)
    • या (batch_size, optional,...,optional, input_size)
  • 2 डी कन्वेन्शनल लेयर्स को इनपुट की आवश्यकता है:
    • अगर का उपयोग कर channels_last:(batch_size, imageside1, imageside2, channels)
    • अगर का उपयोग कर channels_first:(batch_size, channels, imageside1, imageside2)
  • 1D संकल्प और आवर्तक परतों का उपयोग करें (batch_size, sequence_length, features)

अब, इनपुट आकार केवल वही है जिसे आपको परिभाषित करना चाहिए, क्योंकि आपका मॉडल इसे नहीं जान सकता है। केवल आप ही जानते हैं कि, आपके प्रशिक्षण डेटा के आधार पर।

अन्य सभी आकृतियों की गणना स्वचालित रूप से प्रत्येक परत की इकाइयों और विशिष्टताओं के आधार पर की जाती है।

आकृतियों और इकाइयों के बीच संबंध - आउटपुट आकृति

इनपुट आकार को देखते हुए, अन्य सभी आकार परतों की गणना के परिणाम हैं।

प्रत्येक परत की "इकाइयां" आउटपुट आकार (टेंसर का आकार जो परत द्वारा निर्मित होती है और जो अगली परत का इनपुट होगा) को परिभाषित करेगी।

प्रत्येक प्रकार की परत एक विशेष तरीके से काम करती है। घनीभूत परतों में "इकाइयों" के आधार पर आउटपुट आकार होता है, दृढ़ परतों में "फिल्टर" के आधार पर आउटपुट आकार होता है। लेकिन यह हमेशा कुछ लेयर प्रॉपर्टी पर आधारित होता है। (प्रत्येक परत आउटपुट के लिए प्रलेखन देखें)

आइए दिखाते हैं कि "घने" परतों के साथ क्या होता है, जो आपके ग्राफ में दिखाया गया प्रकार है।

घने परत का आउटपुट आकार होता है (batch_size,units)। तो, हाँ, इकाइयों, परत की संपत्ति, आउटपुट आकार को भी परिभाषित करती है।

  • छिपी परत 1: 4 इकाइयां, आउटपुट आकार (batch_size,4):।
  • छिपी परत 2: 4 इकाइयां, आउटपुट आकार (batch_size,4):।
  • अंतिम परत: 1 इकाई, आउटपुट आकार (batch_size,1):।

तौल

वजन पूरी तरह से इनपुट और आउटपुट आकृतियों के आधार पर स्वचालित रूप से गणना की जाएगी। फिर से, प्रत्येक प्रकार की परत एक निश्चित तरीके से काम करती है। लेकिन भार एक मैट्रिक्स होगा जो कुछ गणितीय ऑपरेशन द्वारा इनपुट आकार को आउटपुट आकार में बदलने में सक्षम है।

एक घनी परत में, वजन सभी इनपुटों को गुणा करता है। यह एक कॉलम प्रति इनपुट और एक पंक्ति प्रति यूनिट के साथ एक मैट्रिक्स है, लेकिन यह अक्सर बुनियादी कार्यों के लिए महत्वपूर्ण नहीं है।

छवि में, यदि प्रत्येक तीर पर एक गुणन संख्या होती है, तो सभी संख्याएँ मिलकर भार मैट्रिक्स बनाती हैं।

करस में आकार

इससे पहले, मैंने 30 छवियों, 50x50 पिक्सल और 3 चैनलों का एक उदाहरण दिया था, जिसमें इनपुट आकार का था (30,50,50,3)

चूंकि इनपुट आकार केवल एक है जिसे आपको परिभाषित करने की आवश्यकता है, केरस पहली परत में इसकी मांग करेगा।

लेकिन इस परिभाषा में, केरेस पहले आयाम की उपेक्षा करता है, जो बैच आकार है। आपका मॉडल किसी भी बैच आकार से निपटने में सक्षम होना चाहिए, इसलिए आप केवल अन्य आयामों को परिभाषित करते हैं:

input_shape = (50,50,3)
    #regardless of how many images I have, each image has this shape        

वैकल्पिक रूप से, या जब इसे कुछ प्रकार के मॉडल की आवश्यकता होती है, तो आप बैच आकार वाले आकार को पास कर सकते हैं batch_input_shape=(30,50,50,3)या batch_shape=(30,50,50,3)। यह आपके प्रशिक्षण की संभावनाओं को इस अद्वितीय बैच आकार तक सीमित करता है, इसलिए इसका उपयोग केवल तभी किया जाना चाहिए जब वास्तव में आवश्यक हो।

किसी भी तरह से आप चुनते हैं, मॉडल में दसियों का बैच आयाम होगा।

इसलिए, भले ही आपने उपयोग किया हो input_shape=(50,50,3), जब केरे आपको संदेश भेजता है, या जब आप मॉडल सारांश प्रिंट करते हैं, तो यह दिखाई देगा (None,50,50,3)

पहला आयाम बैच आकार है, यह Noneइसलिए है क्योंकि यह इस बात पर निर्भर करता है कि आप प्रशिक्षण के लिए कितने उदाहरण देते हैं। (यदि आपने स्पष्ट रूप से बैच आकार को परिभाषित किया है, तो आपके द्वारा परिभाषित संख्या इसके बजाय दिखाई देगी None)

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

  • इसलिए, इनपुट आकार को परिभाषित करते समय, आप बैच आकार की उपेक्षा करते हैं: input_shape=(50,50,3)
  • सीधे टेनसर्स पर ऑपरेशन करते समय, आकृति फिर से होगी (30,50,50,3)
  • Keras आप एक संदेश भेजता है, आकार हो जाएगा (None,50,50,3)या (30,50,50,3), तो यह आपको भेजता संदेश की किस प्रकार पर निर्भर करता है।

मंद

और अंत में, क्या है dim?

यदि आपके इनपुट आकार में केवल एक आयाम है, तो आपको इसे टपल के रूप में देने की आवश्यकता नहीं है, आप input_dimस्केलर नंबर के रूप में देते हैं ।

तो, आपके मॉडल में, जहां आपकी इनपुट परत में 3 तत्व हैं, आप इन दोनों में से किसी का उपयोग कर सकते हैं:

  • input_shape=(3,) - अल्पविराम आवश्यक है जब आपके पास केवल एक आयाम हो
  • input_dim = 3

लेकिन जब सीधे टेंसरों के साथ काम करते हैं, तो अक्सर dimयह संदर्भित करेगा कि एक टेंसर के कितने आयाम हैं। उदाहरण के लिए आकार के साथ एक तन्यता (25,10909) के 2 आयाम हैं।


केर में अपनी छवि को परिभाषित करना

कार्स के पास इसे करने के दो तरीके हैं, Sequentialमॉडल, या कार्यात्मक एपीआई Model। मुझे अनुक्रमिक मॉडल का उपयोग करना पसंद नहीं है, बाद में आपको इसे वैसे भी भूलना होगा क्योंकि आप शाखाओं के साथ मॉडल चाहते हैं।

पुनश्च: यहाँ मैंने अन्य पहलुओं को अनदेखा किया, जैसे कि सक्रियण कार्य।

अनुक्रमिक मॉडल के साथ :

from keras.models import Sequential  
from keras.layers import *  

model = Sequential()    

#start from the first hidden layer, since the input is not actually a layer   
#but inform the shape of the input, with 3 elements.    
model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input

#further layers:    
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer   

कार्यात्मक एपीआई मॉडल के साथ :

from keras.models import Model   
from keras.layers import * 

#Start defining the input tensor:
inpTensor = Input((3,))   

#create the layers and pass them the input tensor to get the output tensor:    
hidden1Out = Dense(units=4)(inpTensor)    
hidden2Out = Dense(units=4)(hidden1Out)    
finalOut = Dense(units=1)(hidden2Out)   

#define the model's start and end points    
model = Model(inpTensor,finalOut)

दसियों का आकार

याद रखें कि आप परतों को परिभाषित करते समय बैच आकारों की उपेक्षा करते हैं:

  • inpTensor: (None,3)
  • hidden1Out: (None,4)
  • hidden2Out: (None,4)
  • finalOut: (None,1)

7
input_shape=पैरामीटर के बारे में एक प्रश्न यह रहता है: तर्क के पहले मूल्य को किस आयाम तक संदर्भित किया जाता है? मुझे चीजें पसंद हैं input_shape=(728, ), इसलिए मेरे दिमाग में पहला तर्क कॉलम (निश्चित) और दूसरा पंक्तियों (अलग-अलग) के लिए संदर्भित है। लेकिन यह पायथन के एरियर्स के पंक्ति-प्रमुख क्रम के साथ कैसे बैठता है?
मैक्सिम.क।

17
वह अल्पविराम दूसरा आयाम नहीं बनाता है। यह tupleकेवल एक तत्व बनाने के लिए अजगर संकेतन है जिसमें केवल एक तत्व होता है। input_shape(728,)के रूप में ही है batch_input=(batch_size,728)। इसका मतलब है कि प्रत्येक नमूने में 728 मान हैं।
डेनियल मोलर

@ डैनियल मेलर: क्या आप थोड़ा विस्तार से बता सकते हैं कि "इनपुट एलिमेंट्स" और "डायमेंशन्स" में क्या अंतर है? मुझे लगता है कि ऊपर दिए गए ग्राफ में एक त्रि-आयामी इनपुट परत थी, इस प्रकार मंद = 3 , इसलिए मैं सोच रहा हूं कि मैं यहां क्या याद कर रहा हूं, क्योंकि मैं आपको लिखता हूं कि इनपुट 1-आयामी है ...
हेलेन

1
एक वेक्टर में एक आयाम होता है, लेकिन कई तत्व होते हैं। इसका आकार (n,) ---- एक मैट्रिक्स के दो आयाम हैं, आयाम 0 में m तत्व हैं, आयाम 1 में n तत्व हैं, कुल mxn तत्व, आकार (m, n) है। यदि आप छोटे क्यूब्स में विभाजित "क्यूब" की कल्पना करते हैं, तो डेटा के साथ प्रत्येक छोटे क्यूब, यह 3 डी होगा, एमएक्सएनएक्सो तत्वों, आकार (एम, एन, ओ) के साथ।
डेनियल मोलर

2
@Prince, ऑर्डर मायने रखता है। आप कायर को उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं data_format = 'channels_first'या data_format='channels_last'। मैं हमेशा अंतिम (Keras 'डिफ़ॉल्ट) चैनलों का उपयोग करने की सलाह देता हूं। यह अन्य सभी परतों के साथ अधिक संगत है।
डैनियल मोलर

11

इनपुट आयाम स्पष्ट:

प्रत्यक्ष उत्तर नहीं है, लेकिन मुझे सिर्फ यह एहसास हुआ कि इनपुट डायमेंशन शब्द पर्याप्त भ्रामक हो सकता है, इसलिए सावधान रहें:

यह (अकेले शब्द आयाम) का उल्लेख कर सकते हैं:

a) इनपुट डेटा (या स्ट्रीम ) का आयाम जैसे # N का सेंसर एक्सिस टाइम बीम को सिगनल सिग्नल, या RGB कलर चैनल (3): सुझाए गए शब्द => "InputStream आयाम"

बी) इनपुट सुविधाओं की कुल संख्या / लंबाई (या इनपुट परत) (न्यूनतम रंग छवि के लिए २ = x २84 = the the४) या एफएफटी में तब्दील स्पेक्ट्रम मान, या ३०००

"इनपुट लेयर / इनपुट सुविधा आयाम"

ग) आयामी स्वरूप इनपुट (आमतौर पर 3 डी Keras LSTM में अपेक्षा के अनुरूप) या (#RowofSamples, senors #of, मान #of ..) की (आयाम की #) 3 जवाब है।

"इनपुट की एन आयाम"

घ) विशिष्ट इनपुट आकृति (जैसे। (30,50,50,3) इस अलिखित इनपुट छवि डेटा में, या (30, 250, 3) यदि अपरिवर्तित केरस :

Keras का अपना input_dim है जो इनपुट लेयर / नंबर ऑफ़ इनपुट फ़ीचर के आयाम को संदर्भित करता है

model = Sequential()
model.add(Dense(32, input_dim=784))  #or 3 in the current posted example above
model.add(Activation('relu'))

केरस LSTM में, यह कुल टाइम स्टेप्स को संदर्भित करता है

शब्द बहुत ही भ्रमित करने वाला है, सही है और हम बहुत भ्रमित दुनिया में रहते हैं !!

मुझे लगता है कि मशीन लर्निंग में एक चुनौती विभिन्न भाषाओं या बोलियों और शब्दावली से निपटने की है (जैसे यदि आपके पास अंग्रेजी के 5-8 अत्यधिक भिन्न संस्करण हैं, तो आपको विभिन्न वक्ताओं के साथ बातचीत करने के लिए बहुत उच्च दक्षता की आवश्यकता है)। संभवतः प्रोग्रामिंग भाषाओं में भी यही है।

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