कैरस में स्ट्रीमिंग डेटा के बारे में पूर्वानुमान_केनर के साथ भविष्यवाणियां कैसे प्राप्त करें?


16

में Keras खरोंच से प्रशिक्षण convnets पर ब्लॉग , कोड से पता चलता है केवल नेटवर्क प्रशिक्षण और मान्यता डेटा पर चल रहा है। टेस्ट डेटा के बारे में क्या? क्या सत्यापन डेटा परीक्षण डेटा के समान है (मुझे नहीं लगता)। यदि ट्रेन और सत्यापन फ़ोल्डर के समान लाइनों पर एक अलग परीक्षण फ़ोल्डर था, तो हमें परीक्षण डेटा के लिए एक भ्रम मैट्रिक्स कैसे मिलता है। मुझे पता है कि हमें ऐसा करने के लिए scikit learn या किसी अन्य पैकेज का उपयोग करना होगा, लेकिन मुझे टेस्ट डेटा के लिए वर्गवार संभावनाओं की तर्ज पर कुछ कैसे प्राप्त करना चाहिए? मैं भ्रम मैट्रिक्स के लिए इसका उपयोग करने की उम्मीद कर रहा हूं।


1
आप एक जनरेटर के साथ model.predict_generator (...) फ़ंक्शन को कॉल कर सकते हैं जो परीक्षण सेट वाले निर्देशिका से डेटा पढ़ता है। यह भविष्यवाणियों को लौटाता है, जिसका उपयोग आप एक भ्रम मैट्रिक्स की गणना करने के लिए कर सकते हैं। कि तुम क्या देख रहे हो? डॉक्स के लिए यहां देखें: keras.io/models/fterential
stmax 15

1
हां, मैंने वह देखा। predict_generator भविष्यवाणियों की एक सूची देता है जो 0 और 1 के बीच फ्लोट मानों की एक सूची है। मैं इसकी व्याख्या कैसे करूं? इसे सीधे भ्रम मैट्रिक्स के साथ उपयोग नहीं किया जा सकता है।
रघुराम

2
मैंने अभी तक predict_generator की कोशिश नहीं की है (यह नया है), लेकिन यह कक्षा की संभावनाओं को वापस करता है। मूल्यों को परिवर्तित करने का प्रयास करें <= 0.5 से 0 और> 0.5 से 1. एक बार जब आपके पास एक सूची होती है जिसमें 0 और 1s होते हैं, तो आप इसे भ्रम मैट्रिक्स की गणना के लिए फ़ंक्शन को खिला सकते हैं।
15

2
एक तरफ के रूप में, यह दो वर्ग की समस्याओं के लिए ठीक काम करेगा, लेकिन क्या होगा अगर दो से अधिक वर्ग हैं?
रघुराम

1
यदि दो से अधिक वर्ग हैं, तो आपके नेटवर्क को एक से अधिक आउटपुट चाहिए। एन वर्गों के लिए आपके पास एन आउटपुट हैं और आप उस वर्ग की भविष्यवाणी करते हैं जिसमें सबसे अधिक आउटपुट है। सॉफ्टमैक्स फ़ंक्शन ( en.wikipedia.org/wiki/Softmax_function ) पर एक नज़र डालें ।
stmax

जवाबों:


15

परीक्षण डेटा से एक भ्रम मैट्रिक्स प्राप्त करने के लिए आपको दो चरणों में जाना चाहिए:

  1. परीक्षण डेटा के लिए भविष्यवाणियां करें

उदाहरण के लिए, model.predict_generatorपरीक्षण जनरेटर से पहले 2000 संभावनाओं की भविष्यवाणी करने के लिए उपयोग करें।

generator = datagen.flow_from_directory(
        'data/test',
        target_size=(150, 150),
        batch_size=16,
        class_mode=None,  # only data, no labels
        shuffle=False)  # keep data in same order as labels

probabilities = model.predict_generator(generator, 2000)
  1. लेबल भविष्यवाणियों के आधार पर भ्रम मैट्रिक्स की गणना करें

उदाहरण के लिए, इस मामले की संभावनाओं की तुलना करें कि क्रमशः 1000 बिल्लियां और 1000 कुत्ते हैं।

from sklearn.metrics import confusion_matrix

y_true = np.array([0] * 1000 + [1] * 1000)
y_pred = probabilities > 0.5

confusion_matrix(y_true, y_pred)

परीक्षण और सत्यापन डेटा पर अतिरिक्त नोट

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


2
कोड स्निपेट के लिए धन्यवाद। क्या आप उन दोनों को जोड़ सकते हैं? आपके उदाहरण में y_true डमी डेटा के साथ आबादी वाला लगता है। क्या आप सरणी को आबाद करने के लिए जनरेटर.क्लास का उपयोग करेंगे?
गेगेनविंड

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि np.array([0] * 1000 + [1] * 1000)आप के बजाय एक ही सरणी कर सकते हैंgenerator.classes
मेहदी नेलन

2

यहाँ कुछ कोड है जो मैंने कोशिश की और मेरे लिए काम किया:

pred= model.predict_generator(validation_generator, nb_validation_samples // batch_size)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (validation_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

आप तब उपयोग कर सकते हैं:

print (confusion matrix(predicted_class_indices,labels)

सुनिश्चित करें कि आप shuffle=Falseअपने परीक्षण जनरेटर में उपयोग करते हैं (मेरे मामले में यह सत्यापन जनरेटर है) और validation_generator.reset()अपनी भविष्यवाणी करने से पहले इसका उपयोग करके इसे रीसेट करें।


0

भ्रम मैट्रिक्स के लिए आपको स्केलेर पैकेज का उपयोग करना होगा। मुझे नहीं लगता कि केरस एक भ्रम मैट्रिक्स प्रदान कर सकता है। परीक्षण सेट पर मूल्यों की भविष्यवाणी करने के लिए, बस परीक्षण सेट के लिए भविष्यवाणियों को उत्पन्न करने के लिए model.predict () विधि को कॉल करें। आउटपुट मान का प्रकार आपके मॉडल प्रकार पर निर्भर करता है यानी या तो असतत या संभाव्यता।


जवाब के लिए धन्यवाद। मुझे पता है कि केरस का अपना भ्रम मैट्रिक्स पैकेज नहीं है। मेरा प्रश्न यह है कि model.predict_generator फ्लोट वैल्यूज़ की एक सूची देता है जिसका उपयोग भ्रम मैट्रिक्स की गणना करने के लिए नहीं किया जा सकता है।
रघुराम

आप किस तरह के डेटा पर प्रयोग कर रहे हैं?
enterML

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