केरस में मॉडल विलय का क्या महत्व है?


10

मैंने सीखा है कि केरस में निम्नलिखित के अनुसार दो मॉडलों को "मर्ज" करने की कार्यक्षमता है:

from keras.layers import Merge

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))

merged = Merge([left_branch, right_branch], mode='concat')

विलय एनएन में बिंदु क्या है, किन स्थितियों में यह उपयोगी है? क्या यह एक प्रकार का पहनावा मॉडलिंग है? प्रदर्शन के अर्थ में कई "मोड" (कंकट, एवीजी, डॉट आदि ...) के बीच अंतर क्या है?

जवाबों:


14

इसका उपयोग कई कारणों से किया जाता है, मूल रूप से इसका उपयोग कई नेटवर्क को एक साथ जोड़ने के लिए किया जाता है। एक अच्छा उदाहरण वह होगा जहां आपके पास दो प्रकार के इनपुट हों, उदाहरण के लिए टैग और एक छवि। आप एक नेटवर्क का निर्माण कर सकते हैं, उदाहरण के लिए:

छवि -> रूपांतरण -> अधिकतम पूलिंग -> रूपांतरण -> अधिकतम पूलिंग -> घना

TAG -> एम्बेडिंग -> घनी परत

इन नेटवर्क को एक भविष्यवाणी में संयोजित करने और उन्हें एक साथ प्रशिक्षित करने के लिए आप अंतिम वर्गीकरण से पहले इन घने परतों को मिला सकते हैं।

ऐसे नेटवर्क जहां आपके पास कई इनपुट होते हैं, उनमें से सबसे 'स्पष्ट' उपयोग होता है, यहां एक चित्र है जो शब्दों को एक आरएनएन के अंदर छवियों के साथ जोड़ता है, मल्टीमॉडल हिस्सा वह है जहां दो इनपुट विलय होते हैं:

मल्टीमॉडल न्यूरल नेटवर्क

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

Keras को कई इनपुट्स खिलाने के लिए आप सरणियों की सूची पास कर सकते हैं। शब्द / छवि उदाहरण में आपके पास दो सूचियाँ होंगी:

x_input_image = [image1, image2, image3]
x_input_word = ['Feline', 'Dog', 'TV']
y_output = [1, 0, 0]

तो आप निम्नानुसार फिट कर सकते हैं:

model.fit(x=[x_input_image, x_input_word], y=y_output]

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

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

कैरस में model.fit()फिटिंग के लिए एक्स और वाई दोनों को स्वीकार करता है और modelइस मामले में एक "गैर-मर्ज" मॉडल भी हो सकता है। उदाहरण के लिए Sklearn में अन्य मॉडल प्रकारों की तरह बहुत ज्यादा।
हेंड्रिक

3
लेबल मेरी तरफ से एक खराब चुना हुआ नाम हो सकता है, मान लें कि आपके पास उस चित्र के साथ एक तस्वीर और एनोटेशन है, और आप यह वर्गीकृत करना चाहते हैं कि क्या संयोजन बिल्लियों के बारे में है या नहीं, तो आपके पास दो प्रकार के इनपुट हैं, और एक बाइनरी आउटपुट । उन दोनों के बीच तालमेल पाने के लिए आपको परतों को मर्ज करना होगा। एक और उदाहरण है जहां आपके पास दो चित्र हैं, एक ऊपर से और एक नीचे से जिसे आपको एक साथ वर्गीकृत करना है
Jan van der Vegt

3
@ हेंड्रिक: "घटक मॉडल" नहीं हैं, केवल एक मॉडल है। यह एक जटिल एक है, जो परत विलय की सुविधा द्वारा सक्षम है। आप इसका मूल्यांकन किसी भी एक मॉडल के लिए करते हैं - यानी एक होल्ड-आउट टेस्ट डेटा सेट के खिलाफ एक मीट्रिक के साथ (छवि / शब्द उदाहरण में चित्र युक्त डेटा, संबद्ध आंशिक पाठ और अगले शब्द के रूप में पूर्वानुमान के लिए लेबल के रूप में)। यदि आप चाहते हैं, तो आप मॉडल के भीतर की परतों का निरीक्षण कर सकते हैं कि वे क्या कर रहे हैं - उदाहरण के लिए CNN सुविधाओं का विश्लेषण अभी भी दृढ़ परतों पर लागू किया जा सकता है।
नील स्लेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.