मैं एक केरास सीएनएन का उपयोग कर एक बाइनरी वर्गीकरण बनाना चाहता हूं। मैं इनपुट डेटा के 6000 के बारे में पंक्तियों जो इस तरह दिखता है:बाइनरी केरास सीएनएन हमेशा 1 की भविष्यवाणी क्यों करता है?
>> print(X_train[0])
[[[-1.06405307 -1.06685851 -1.05989663 -1.06273152]
[-1.06295958 -1.06655996 -1.05969803 -1.06382503]
[-1.06415248 -1.06735609 -1.05999593 -1.06302975]
[-1.06295958 -1.06755513 -1.05949944 -1.06362621]
[-1.06355603 -1.06636092 -1.05959873 -1.06173742]
[-1.0619655 -1.06655996 -1.06039312 -1.06412326]
[-1.06415248 -1.06725658 -1.05940014 -1.06322857]
[-1.06345662 -1.06377347 -1.05890365 -1.06034568]
[-1.06027557 -1.06019084 -1.05592469 -1.05537518]
[-1.05550398 -1.06038988 -1.05225064 -1.05676692]]]
>>> print(y_train[0])
[1]
और फिर मैं इस तरह से एक सीएनएन का निर्माण कर दिया है:
model = Sequential()
model.add(Convolution1D(input_shape = (10, 4),
nb_filter=16,
filter_length=4,
border_mode='same'))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(Convolution1D(nb_filter=8,
filter_length=4,
border_mode='same'))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(64))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(1))
model.add(Activation('softmax'))
reduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.9, patience=30, min_lr=0.000001, verbose=0)
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(X_train, y_train,
nb_epoch = 100,
batch_size = 128,
verbose=0,
validation_data=(X_test, y_test),
callbacks=[reduce_lr],
shuffle=True)
y_pred = model.predict(X_test)
लेकिन यह निम्न रिटर्न:
>> print(confusion_matrix(y_test, y_pred))
[[ 0 362]
[ 0 608]]
सभी भविष्यवाणियां क्यों हैं? सीएनएन इतना बुरा क्यों करता है?
यह समय के लगभग 2/3 सही है; और मैं इनपुट डेटा देखता हूं जो निरंतर -1.06 होने के करीब है। यदि यह सभी डेटा के लिए रखता है, तो हो सकता है कि यह इनपुट स्पेस को विभाजित नहीं कर सके और अनुकूलित करता है कि कौन सी कक्षा सबसे अधिक होती है, क्योंकि यह सबसे अच्छी शर्त है (हालांकि मुझे लगता है कि आपका सामान्यीकरण कॉल इसे हल कर सकता है)। मैं एक कामकाजी उदाहरण के बिना सत्यापित नहीं कर सकता। <- यह कहा जा रहा है कि, इस व्यवहार के लिए एक बहुत ही आम कारण सीखने की दर में एक समस्या है, क्या आप सीखने की दर को मजबूती से बढ़ाने की कोशिश कर सकते हैं? – Uvar
चीयर्स! मैंने सीखने की दर 0.001 से 0.1 में बदलने की कोशिश की, लेकिन मुझे एक ही आउटपुट मिलता है। :(कोई और विचार? – harrison4