मैं निम्नलिखित कोड के साथ एनएलपी कार्य के लिए केरे में एक साधारण मॉडल प्रशिक्षण दे रहा हूं। ट्रेन, परीक्षण और सत्यापन सेट के लिए परिवर्तनीय नाम आत्म व्याख्यात्मक हैं। इस डेटासेट में 1 9 वर्ग हैं इसलिए नेटवर्क की अंतिम परत में 1 9 आउटपुट हैं। लेबल भी एक गर्म एन्कोडेड हैं।केरास: मॉडल.अवलुएट बनाम मॉडल.predict बहु-वर्ग एनएलपी कार्य में सटीकता अंतर
nb_classes = 19
model1 = Sequential()
model1.add(Embedding(nb_words,
EMBEDDING_DIM,
weights=[embedding_matrix],
input_length=MAX_SEQUENCE_LENGTH,
trainable=False))
model1.add(LSTM(num_lstm, dropout=rate_drop_lstm, recurrent_dropout=rate_drop_lstm))
model1.add(Dropout(rate_drop_dense))
model1.add(BatchNormalization())
model1.add(Dense(num_dense, activation=act))
model1.add(Dropout(rate_drop_dense))
model1.add(BatchNormalization())
model1.add(Dense(nb_classes, activation = 'sigmoid'))
model1.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
#One hot encode all labels
ytrain_enc = np_utils.to_categorical(train_labels)
yval_enc = np_utils.to_categorical(val_labels)
ytestenc = np_utils.to_categorical(test_labels)
model1.fit(train_data, ytrain_enc,
validation_data=(val_data, yval_enc),
epochs=200,
batch_size=384,
shuffle=True,
verbose=1)
पहले युग के बाद, यह मेरे इन outputs देता है।
Epoch 1/200
216632/216632 [==============================] - 2442s - loss: 0.1427 - acc: 0.9443 - val_loss: 0.0526 - val_acc: 0.9826
फिर मैं परीक्षण डेटासेट पर अपने मॉडल का मूल्यांकन करता हूं और यह मुझे 0.98 के आसपास शुद्धता भी दिखाता है।
model1.evaluate(test_data, y = ytestenc, batch_size=384, verbose=1)
हालांकि, लेबल एक गर्म इनकोड, तो मैं वर्गों की भविष्यवाणी वेक्टर की जरूरत है ताकि मैं भ्रम मैट्रिक्स आदि तो मैं का उपयोग उत्पन्न कर सकते हैं,
PREDICTED_CLASSES = model1.predict_classes(test_data, batch_size=384, verbose=1)
temp = sum(test_labels == PREDICTED_CLASSES)
temp/len(test_labels)
0.83
इससे पता चलता है कि कुल की भविष्यवाणी की कक्षाएं 83% सटीक थे हालांकि model1.evaluate
98% सटीकता दिखाता है !! मुझसे यहां क्या गलत हो रहा है? क्या मेरा नुकसान फ़ंक्शन क्लासिकल क्लास लेबल्स के साथ ठीक है? भविष्यवाणी परत के लिए sigmoid
सक्रियण फ़ंक्शन की मेरी पसंद क्या है? या कैरस मॉडल का मूल्यांकन करने के तरीके में अंतर है? कृपया गलत क्या हो सकता है पर सुझाव दें। यह गहरी मॉडल बनाने की मेरी पहली कोशिश है, इसलिए मुझे यहां क्या गलत है इसकी समझ नहीं है।
उपयोग 'का उपयोग करके दोनों स्पष्ट और बाइनरी सटीकता प्राप्त कर सकते हैं 'softmax'' और'' ' 'sigmoid'' और'' binary_crossentropy'' के बजाय categorical_crossentropy''। बाद वाले दो का उपयोग करके, आप समस्या को मल्टीलाबेल समस्या के रूप में देख रहे हैं, मल्टीक्लास समस्या नहीं। –
आपकी प्रतिक्रिया के लिए धन्यवाद। मैं इसे आज़माउंगा और तदनुसार अपडेट करूंगा। –