केरेस मल्टीपल "सॉफ्टमैक्स" अंतिम परत में संभव है?


10

अंतिम परत में कई सॉफ्टमैक्स

क्या केरस में अंतिम परत में म्यूटेंट सॉफ्टमैक्स को लागू करना संभव है? तो नोड्स का योग 1-4 = 1; 5-8 = 1; आदि।

क्या मुझे एक अलग नेटवर्क डिज़ाइन के लिए जाना चाहिए?

जवाबों:


7

मैं कार्यात्मक इंटरफ़ेस का उपयोग करूंगा।

कुछ इस तरह:

from keras.layers import Activation, Input, Dense
from keras.models import Model
from keras.layers.merge import Concatenate

input_ = Input(shape=input_shape)

x = input_
x1 = Dense(4, x)
x2 = Dense(4, x)
x3 = Dense(4, x)
x1 = Activation('softmax')(x1)
x2 = Activation('softmax')(x2)
x3 = Activation('softmax')(x3)
x = Concatenate([x1, x2, x3])

model = Model(inputs=input_, outputs=x)

2
मैं आपको समाधान जोड़ने का सुझाव नहीं दे रहा हूं, लेकिन मुझे लगता है कि उत्तर को छोड़ देना-जैसा कि ओपी के मॉडल-निर्माण का काम पूरा हो जाएगा। लेकिन अगर वे वास्तव में मॉडल को प्रशिक्षित करना चाहते हैं, तो ओपी के लिए कोड के अन्य भागों में काम करने के लिए एक समान अतिरिक्त राशि है। आप कम से कम उस आवश्यकता का संदर्भ ले सकते हैं। अन्य उत्तर के लिए भी यही लागू होता है। । ।
नील स्लेटर

1
@NeilSlater आप बिलकुल सही हैं। मुझे नहीं पता कि मुझे एक अलग लागत फ़ंक्शन की आवश्यकता क्यों है। क्या आप मुझे बता सकते हैं कि यह महत्वपूर्ण क्यों है?
आर्थरडेंट

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

1
@arthurDent:। । । हालांकि मैं इसे और अधिक विस्तार से सोच रहा हूं, और सॉफ्टमैक्स के साथ एंटिकली क्रॉस मल्टीक्रैप्स के लिए लॉजिनेट पर ग्रेडिएंट, जो कि केवल अभी भी सफलतापूर्वक लागू और काम कर सकता है। एक सामान्य सॉफ्टमैक्स आउटपुट बेशक 3 वर्गों को एक साथ सीखने में विफल होता है, लेकिन शायद यह उत्तर आपको सभी की आवश्यकता है। । । y^y
नील स्लेटर

1
मेट्रिक्स जैसे categorical_accuracyऔर predict_classesतरीकों के उपयोग के लिए अधिक विचार की आवश्यकता हो सकती है। । ।
नील स्लेटर

5

यह संभव है कि केवल अपने स्वयं के सॉफ्टमैक्स फ़ंक्शन को लागू करें। आप एक टेंसर को भागों में विभाजित कर सकते हैं, फिर सॉफ्टमैक्स को अलग-अलग प्रति भाग और समतल टेंसर भागों की गणना करें:

def custom_softmax(t):
    sh = K.shape(t)
    partial_sm = []
    for i in range(sh[1] // 4):
        partial_sm.append(K.softmax(t[:, i*4:(i+1)*4]))
    return K.concatenate(partial_sm)

concatenate अंतिम अक्ष के माध्यम से अक्ष तर्क तर्क के बिना (हमारे मामले में अक्ष = 1)।

फिर आप इस सक्रियण फ़ंक्शन को एक छिपी हुई परत में शामिल कर सकते हैं या इसे एक ग्राफ में जोड़ सकते हैं।

Dense(activation=custom_activation)

या

model.add(Activation(custom_activation))

आपको एक नई लागत फ़ंक्शन को भी परिभाषित करने की आवश्यकता है।

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