श्रेणीबद्ध-एन्ट्रापी एक-गर्म एन्कोडेड सुविधाओं के साथ गलत काम करता है

Aug 18 2020

मैं एक-हॉट एन्कोडिंग डेटा के साथ gradorical_crossentropy समस्या से जूझ रहा हूँ। समस्या नीचे प्रस्तुत कोड के अपरिवर्तित आउटपुट में है:

            inputs = keras.Input(shape=(1190,), sparse=True)
            lay_1 = layers.Dense(1190, activation='relu')
            x = lay_1(inputs)
            x = layers.Dense(10, activation='relu')(x)
            out = layers.Dense(1, activation='sigmoid')(x)
            self.model = keras.Model(inputs, out, name='SimpleD2Dense')
            self.model.compile(
                optimizer=keras.optimizers.Adam(),
                loss=tf.losses.categorical_crossentropy,
                metrics=['accuracy']
            )
Epoch 1/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 2/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 3/3
1572/1572 - 7s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543

डेटा के बारे में कुछ शब्द: 1190 सुविधाएँ ( 119 श्रेणियों के साथ 10 वास्तविक सुविधाएँ )। निविष्टियाँ प्रति नमूना 1190 मानों के साथ एक डेटाफ्रेम पंक्तियाँ हैं। आउटपुट एक बाइनरी वैल्यू 0 या 1 है।

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

मुख्य प्रश्न यह है कि gradorical_crossentropy काम क्यों नहीं कर रहा है और इसे सही तरीके से कैसे उपयोग किया जाए।

इसके अलावा, डेटा प्रतिनिधित्व के बारे में एक चिंता का विषय है कि क्या यह एक सीधा-सीधा एक-हॉट एन्कोडेड डेटा की एक दुर्लभ पंक्ति में उपयोग करने का सही तरीका है?

जवाब

10xAI Aug 18 2020 at 13:52

इसके लिए काम करने के लिए -

  1. आउटपुट न्यूरॉन्स की गिनती 02 में बदलें
  2. सॉफ्टमैक्स को आउटपुट का सक्रियण
  3. ओएचई आउटपुट के सभी वैक्टर रखें


इस प्रकार केरस को आंतरिक रूप से डिजाइन किया गया है। आधिकारिक दस्तावेज पृष्ठ पर भी यही लिखा गया है

बाइनरीक्रॉसेंट्रॉपी क्लास
इस क्रॉस-एन्ट्रापी नुकसान का उपयोग करें जब केवल दो लेबल कक्षाएं हों (0 और 1 माना जाता है)। प्रत्येक उदाहरण के लिए, भविष्यवाणी के अनुसार एक एकल फ़्लोटिंग-पॉइंट मान होना चाहिए। नीचे दिए गए स्निपेट में, चार उदाहरणों में से प्रत्येक में केवल एक ही फ़्लोटिंग-पॉइंटिंग मान है, और y_pred और y_true दोनों का आकार [बैच_साइज़] है

श्रेणीबद्धतावादी वर्ग
y_pred और y_true दोनों का आकार [बैच_साइज़, num_classes] है

और हम जानते हैं कि वर्गीकरण बहु-वर्ग रखने के लिए आपको एक दूसरे के सापेक्ष सभी num_class आउटपुट बनाने की आवश्यकता है , इसलिए हम सॉफ्टमैक्स का उपयोग करते हैं

रेफरी
केर आधिकारिक पृष्ठ
समान एसई धागा
समान एसई धागा