Metni konuya göre sınıflandırmak için bir CNN eğitmeye çalışıyorum. İkili çapraz entropi kullandığımda ~% 80 doğruluk elde ediyorum, kategorik çapraz entropi ile ~% 50 doğruluk elde ediyorum.
Bunun neden olduğunu anlamıyorum. Bu çok sınıflı bir sorun, kategorik çapraz entropi kullanmak zorunda olduğum ve ikili çapraz entropi ile sonuçların anlamsız olduğu anlamına gelmiyor mu?
model.add(embedding_layer)
model.add(Dropout(0.25))
# convolution layers
model.add(Conv1D(nb_filter=32,
filter_length=4,
border_mode='valid',
activation='relu'))
model.add(MaxPooling1D(pool_length=2))
# dense layers
model.add(Flatten())
model.add(Dense(256))
model.add(Dropout(0.25))
model.add(Activation('relu'))
# output layer
model.add(Dense(len(class_id_index)))
model.add(Activation('softmax'))
Sonra ben ya categorical_crossentropy
kayıp fonksiyonu olarak kullanarak böyle derlemek :
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
veya
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Sezgisel olarak neden kategorik çapraz entropiyi kullanmak istediğimi anlamıyorum, ikili ile neden iyi, kategorik ile kötü sonuçlar aldığımı anlamıyorum.
categorical_crossentropy
. İki sınıfınız varsa, bunlar 0, 1
ikili etiketlerde ve 10, 01
kategorik etiket biçiminde temsil edilir .
Dense(1, activation='softmax')
çünkü ikili sınıflandırma yanlıştır. Unutmayın, softmax çıkışı bire denk gelen bir olasılık dağılımıdır. İkili sınıflandırmaya sahip yalnızca bir çıkış nöronuna sahip olmak istiyorsanız, ikili çapraz entropili sigmoid kullanın.
categorical_crossentropy
. Ayrıca etiketlerin kategorik biçime dönüştürülmesi gerekir.to_categorical
Bunu yapmak için bakın . Ayrıca burada kategorik ve ikili çapraz geçişlerin tanımlarına bakınız .