मैं keras के साथ एक साधारण तंत्रिका जाल फिट करने की कोशिश कर रहा हूँ। मेरे पास इनपुट है और मैं एक पूर्णांक आउटपुट चाहता हूं जो अपने स्वयं के वर्ग का प्रतिनिधित्व करता है। मैं चाहता हूं कि यह 0-13 रेंज से हो। हालाँकि जब अंतिम आउटपुट 1 पर सेट होता है तो यह मुझे एक त्रुटि देता है

InvalidArgumentError: Received a label value of 12 which is outside the valid range of [0, 1).  Label values:

तंत्रिका जाल को संकलित करने के लिए मेरे पास अब तक यही है

import keras
from keras.models import Sequential
from keras.layers import Dense

classifier = Sequential()
classifier.add(Dense(units = 10, kernel_initializer = 'uniform', 
                     activation = 'relu', input_dim = 10))
classifier.add(Dense(units = 11, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, y_train, batch_size = 2000, epochs = 20)

मेरा प्रशिक्षण इनपुट सरणी के सरणियाँ हैं और लेबल 0-12 . के मानों के साथ केवल एक सरणी है

यह आउटपुट है

enter image description here

0
Loyal_Burrito 19 जून 2019, 00:12

2 जवाब

सबसे बढ़िया उत्तर

आइए विरल श्रेणीबद्ध क्रॉस-एन्ट्रॉपी को समझते हैं

यह आपको बस पूर्णांक लेबल (एक-हॉट सरणी के बजाय) के माध्यम से त्रुटि को मापने की क्षमता देगा।

तो त्रुटि क्यों?

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

classifier.add(Dense(units = 14, kernel_initializer = 'uniform', activation = 'sigmoid'))

और वैसे यह metrics = ['sparse_categorical_accuracy'] का उपयोग करने का अच्छा अभ्यास है

यदि आप पूर्णांक आउटपुट चाहते हैं

2 विकल्प हैं (मेरी जानकारी के अनुसार):

y_pred = np.argmax(classifier.predict(X_test), axis=1)

या केवल:

y_pred = classifier.predict_classes(X_test)
1
Community 20 जून 2020, 12:12

यदि आप [०, १३] श्रेणी में पूर्णांक इनपुट चाहते हैं, तो यह १४ आउटपुट वर्गों (शून्य से शुरू होकर ० से १३ तक के सूचकांक) से मेल खाता है, इसलिए आपको नेटवर्क को उचित रूप से कॉन्फ़िगर करने की आवश्यकता है:

classifier.add(Dense(units = 14, kernel_initializer = 'uniform', activation = 'softmax'))

प्रशिक्षण के बाद, जब मॉडल भविष्यवाणी करता है, तो आपको पूर्णांक [0, 13] पर संभाव्यता वितरण मिलेगा। एन्कोडेड पूर्णांक प्राप्त करने के लिए, आपको सूचकांक को अधिकतम संभावना के साथ लेना होगा, उदाहरण के लिए:

pred = classifier.predict(some_data)
integer = np.argmax(pred, axis=-1)

यह अनुमानित पूर्णांक लेबल का उत्पादन करेगा।

1
Dr. Snoopy 19 जून 2019, 01:46