बहु-श्रेणी वर्गीकरण के लिए सबसे अच्छा केरस मॉडल क्या है?


30

मैं अनुसंधान, पर काम कर रहा हूँ, जहां तीन घटना विजेता के वर्गीकृत एक की जरूरत = ( win, draw, lose)

WINNER  LEAGUE  HOME    AWAY    MATCH_HOME  MATCH_DRAW  MATCH_AWAY  MATCH_U2_50 MATCH_O2_50
3         13    550      571          1.86        3.34        4.23       1.66     2.11
3         7     322     334           7.55         4.1         1.4       2.17     1.61

मेरा वर्तमान मॉडल है:

def build_model(input_dim, output_classes):
    model = Sequential()
    model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
    model.add(Dropout(0.5))
    model.add(Dense(output_dim=output_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adadelta')
    return model
  1. मुझे यकीन नहीं है कि यह बहु-श्रेणी वर्गीकरण के लिए सही है
  2. बाइनरी वर्गीकरण के लिए सबसे अच्छा सेटअप क्या है?

संपादित करें: # 2 - जैसे?

model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')

1
क्या आपका मतलब "मॉडल" है, या केवल अंतिम परत की activation='softmax'पसंद और संकलन के विकल्प का जिक्र है loss='categorical_crossentropy'? IMO, उन लोगों के लिए आपकी पसंद एक मॉडल के लिए कई पारस्परिक रूप से अनन्य वर्गों की भविष्यवाणी करने के लिए अच्छा है। यदि आप पूरे मॉडल के बारे में सलाह चाहते हैं, तो यह काफी अलग है, और आपको इस बारे में अधिक जानकारी देनी चाहिए कि आपकी चिंताएं क्या हैं, अन्यथा एक ही उत्तर में बहुत अधिक व्याख्या करना है।
नील स्लेटर

मेरा मतलब architectureपरतों के बारे में है। मेरे प्रश्न # 2 के लिए कोई सलाह?
स्पेनिशबॉय

1
वास्तुकला के निर्माण के लिए शायद ही कभी "सही" तरीका होता है, जो कि आपके द्वारा अलग-अलग मेटा-पैरामेट्स के साथ कुछ परीक्षण किया जाना चाहिए, और परिणाम-चालित होना चाहिए (प्रशिक्षण समय / स्मृति उपयोग आदि के लिए संसाधन के उपयोग पर किसी भी सीमा सहित)। # 2 के लिए, आप या तो अभी के समान सॉफ्टमैक्स के साथ दो आउटपुट कर सकते हैं, या आप एक आउटपुट के साथ आउटपुट लेयर रख सकते हैं, activation='sigmoid'औरloss='binary_crossentropy'
नील स्लेटर

activation='sigmoid'में उत्पादन परत। छिपी हुई परत 'relu'आप जैसे चाहें वैसे रह सकते हैं (हालाँकि मैं शायद 'tanh'इस समस्या के लिए शुरू करूँगा , यह सिद्धांत से बहुत कम समर्थन के साथ व्यक्तिगत पसंद है)
नील स्लेटर

जवाबों:


35

activation='softmax'अंतिम परत में आपकी पसंद और संकलन के विकल्प loss='categorical_crossentropy'एक मॉडल के लिए कई परस्पर-अनन्य कक्षाओं की भविष्यवाणी करने के लिए अच्छे हैं।

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

एक उपयुक्त वास्तुकला चुनने में मदद करने के लिए एक क्रॉस-सत्यापन सेट का उपयोग करें। अपने मॉडल के सामान्य प्रदर्शन का अधिक सटीक माप प्राप्त करने के लिए, आपको एक अलग परीक्षण सेट का उपयोग करना चाहिए। सीवी सेट के लिए आपके प्रशिक्षण सेट से अलग किए गए डेटा का उपयोग इसके लिए किया जाना चाहिए। एक उचित विभाजन 60/20/20 ट्रेन / cv / परीक्षण हो सकता है, जो इस बात पर निर्भर करता है कि आपके पास कितना डेटा है, और आपको एक सटीक अंतिम आंकड़ा रिपोर्ट करने की कितनी आवश्यकता है।

प्रश्न # 2 के लिए, आप या तो अभी के समान सॉफ्टमैक्स फाइनल के साथ दो आउटपुट कर सकते हैं, या आपके पास एक आउटपुट के साथ अंतिम परत हो सकती है , activation='sigmoid'और loss='binary_crossentropy'

विशुद्ध रूप से एक आंत से महसूस करता है कि इस डेटा के साथ क्या काम हो सकता है, मैं इसके बजाय छिपी हुई परत में 'tanh'या 'sigmoid'सक्रियण के साथ प्रयास करने का सुझाव दूंगा 'relu', और मैं छिपे हुए न्यूरॉन्स (जैसे 100) की संख्या बढ़ाने और ड्रॉपआउट की मात्रा को कम करने का सुझाव भी दूंगा ( उदाहरण के लिए 0.2)। कैविएट: तंत्रिका नेटवर्क वास्तुकला पर आंत की भावना वैज्ञानिक नहीं है। यह कोशिश करो, और यह परीक्षण।

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