2016-08-16 20 views
19

से कक्षा लेबल प्राप्त करें मेरे पास केरास में एक कार्यात्मक मॉडल है (रेपो उदाहरणों से Resnet50)। मैंने इसे ImageDataGenerator और flow_from_directory डेटा और सहेजे गए मॉडल .h5 फ़ाइल के साथ प्रशिक्षित किया। जब मैं model.predict पर कॉल करता हूं तो मुझे कक्षा की संभावनाओं की एक सरणी मिलती है। लेकिन मैं उन्हें कक्षा लेबल (मेरे मामले में - फ़ोल्डर नाम) से जोड़ना चाहता हूं। मैं उन्हें कैसे प्राप्त कर सकता हूं? मैंने पाया कि मैं model.predict_classes और model.predict_proba का उपयोग कर सकता हूं, लेकिन मेरे पास इन कार्यों को केवल कार्यात्मक मॉडल में नहीं है, केवल अनुक्रमिक में।केरास कार्यात्मक मॉडल

उत्तर

7

अद्यतन: यह अब नए केरा संस्करणों के लिए मान्य नहीं है। एमिलिया अपोस्टोलोवा के उत्तर में कृपया argmax() का उपयोग करें।

कार्यात्मक एपीआई मॉडल में केवल predict() फ़ंक्शन है जो वर्गीकरण के लिए कक्षा की संभावनाओं को वापस कर देगा। फिर आप probas_to_classes() उपयोगिता फ़ंक्शन का उपयोग करके सबसे संभावित कक्षाओं का चयन कर सकते हैं। उदाहरण:

y_proba = model.predict(x) 
y_classes = keras.np_utils.probas_to_classes(y_proba) 

यह अनुक्रमिक मॉडल पर model.predict_classes(x) के बराबर है।

इसका कारण यह है कि कार्यात्मक एपीआई कार्यों के अधिक सामान्य वर्ग का समर्थन करता है जहां predict_classes() समझ में नहीं आता है।

और जानकारी: https://github.com/fchollet/keras/issues/2524

+2

वर्तमान में, np.utils.py के लिए कोड (देखें https://github.com/fchollet/keras/blob/master/keras/utils/np_utils.py) में probas_to_classes विधि नहीं है। क्या उन्होंने इसे किसी अन्य समारोह में बदल दिया? क्रिप्या मेरि सहायता करे। – noobalert

+1

मेरे पास @noobalert के समान समस्या है, इसमें फ़ंक्शन नहीं है। –

+4

उपयोग 'y_classes = y_proba.argmax (अक्ष = -1)' बजाय – Zach

12
y_prob = model.predict(x) 
y_classes = y_prob.argmax(axis=-1) 

रूप here का सुझाव दिया।

+1

यह मुझे ऑफसेट देता है, लेकिन मुझे पहले से ही यह पता लगाने का एक तरीका था ...मैं लेबल नाम कैसे प्राप्त करूं? – Trejkaz

3

जब कोई प्रवाह_from_directory का उपयोग करता है तो समस्या संभाव्यता आउटपुट की व्याख्या कैसे करें। जैसा कि, संभाव्यता आउटपुट और क्लास लेबल्स को कैसे मैप करना है, जैसे प्रवाह_from_directory एक-गर्म वैक्टर बनाता है, पहले से ज्ञात नहीं है।

हम एक शब्दकोश है कि भविष्यवाणी वेक्टर के सूचकांक है कि हम उत्पादन जब हम

generator= train_datagen.flow_from_directory("train", batch_size=batch_size) 
label_map = (generator.class_indices) 

label_map चर का उपयोग के रूप में प्राप्त करने के लिए वर्ग लेबल नक्शे प्राप्त कर सकते हैं इस

{'class_14': 5, 'class_10': 1, 'class_11': 2, 'class_12': 3, 'class_13': 4, 'class_2': 6, 'class_3': 7, 'class_1': 0, 'class_6': 10, 'class_7': 11, 'class_4': 8, 'class_5': 9, 'class_8': 12, 'class_9': 13} 
की तरह एक शब्दकोश है

तब से संबंध संभाव्यता स्कोर और कक्षा के नामों के बीच प्राप्त किया जा सकता है।

असल में, आप इस कोड को इस कोड द्वारा बना सकते हैं।

from glob import glob 
class_names = glob("*") # Reads all the folders in which images are present 
class_names = sorted(class_names) # Sorting them 
name_id_map = dict(zip(class_names, range(len(class_names)))) 

उपरोक्त कोड में चर name_id_map भी एक flow_from_directory की class_indices समारोह से प्राप्त के रूप में ही शब्दकोश में शामिल है।

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे