केरस में मल्टी टास्क लर्निंग


12

मैं केरस में साझा परतों को लागू करने की कोशिश कर रहा हूं। मैं देख रहा हूं कि केरस के पास है keras.layers.concatenate, लेकिन मैं इसके उपयोग के बारे में प्रलेखन से अनिश्चित हूं। क्या मैं इसे कई साझा परतों को बनाने के लिए उपयोग कर सकता हूं? एक सरल साझा तंत्रिका नेटवर्क को लागू करने का सबसे अच्छा तरीका क्या होगा जैसा कि केरस का उपयोग करके नीचे दिखाया गया है?साझा तंत्रिका नेटवर्क

ध्यान दें कि सभी 3 एनएन के लिए इनपुट, आउटपुट और साझा परतों के सभी आकार समान हैं। तीन एनएन में कई साझा परतें (और गैर-साझा परतें) हैं। रंगीन परतें प्रत्येक एनएन के लिए अद्वितीय होती हैं, और उनका आकार समान होता है।

असल में, यह आंकड़ा कई साझा छिपी हुई परतों के साथ 3 समान एनएन का प्रतिनिधित्व करता है, इसके बाद कई गैर-साझा छिपी हुई परतें होती हैं।

मैं अनिश्चित हूं कि ट्विटर के उदाहरण में कई परतों को कैसे साझा किया जाए, बस एक साझा परत थी (एपीआई डॉक्टर में उदाहरण)।

जवाबों:


10

कार्यात्मक एपीआई का उपयोग करके आप आसानी से अपने नेटवर्क के विभिन्न हिस्सों के बीच वजन साझा कर सकते हैं। आपके मामले में हमारे पास एक जो हमारा इनपुट है, फिर हमारे पास एक परत होगी जिसे साझा कहा जाएगा । तब हमारे पास सब 1, सब 2 और सब 3 नामक तीन अलग-अलग परतें होंगी और फिर आउट 1, आउट 2 और आउट 3 नामक तीन आउटपुट लेयर होंगी।Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

हम अपने मॉडल को अब इस तरह परिभाषित कर सकते हैं:

model = Model(inputs=x, outputs=[out1, out2, out3])

यह अब तीन आउटपुट की सूची की उम्मीद करेगा, प्रत्येक आउटपुट के लिए।

आप इन अवधारणाओं के साथ बहुत आगे जा सकते हैं। मान लें कि हम व्यक्ति परतों के लिए अलग-अलग वजन सीखना चाहते हैं, लेकिन फिर भी आउटपुट परत की दिशा में रैखिक संयोजन के लिए एक ही वजन करना चाहते हैं, हम ऐसा करके प्राप्त कर सकते हैं:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

संपादित करें: कॉनटेननेटिंग मूल रूप से आप जो करना चाहते हैं उसके विपरीत है, यह आपके नेटवर्क के विभिन्न हिस्सों के आउटपुट (इंटरमीडिएट) को एक नई परत में चिपका रहा है। आप वास्तव में कई अलग-अलग हिस्सों में विभाजित करना चाहते हैं।


बहुत बहुत धन्यवाद। जब हम ऐसा करते हैं model.fit([data1, data2], [labels1, labels2]), तो इसे एकल मॉडल के रूप में प्रशिक्षित किया जाएगा (बैक प्रचार), है ना?
आदित्य

1
हाँ, यह सिर्फ एक बात होगी, अगर लेबल्स के अलग-अलग नुकसान जुड़े हुए हैं, तो आपको कुछ और काम करने की आवश्यकता होगी, यह केरस में सुपर आसान नहीं है, लेकिन असंभव नहीं है, अगर वे एक ही नुकसान के कार्य को साझा किए बिना साझा करते हैं तो यह बॉक्स से बाहर काम करता है
जन वैन डर 23

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

@shahar_m क्षमा करें मैं अनिश्चित हूं कि उपयोग का मामला क्या है। यदि एकीकृत मॉडल का प्रशिक्षण भार निर्धारित किया जाता है, तो आप उन परतों को लोड और फ्रीज कर सकते हैं।
आदित्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.