Kategorik çapraz entropi, tek çalışırken kodlanmış özelliklerde yanlış çalışıyor
Tek sıcak kodlama verileriyle categorical_crossentropy problemiyle uğraşıyorum. Sorun, aşağıda gösterilen kodun değişmemiş çıktısında:
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
Veriler hakkında birkaç kelime: 1190 özellik ( 119 kategoride 10 gerçek özellik ). Girişler, örnek başına 1190 değer içeren bir veri çerçevesi satırlarıdır. Çıkış, 0 veya 1 ikili değeridir.
Daha önce yapılan denemeler: tatmin edici sonuçlarla kullanılan binary_crossentropy, ancak, doğrulama verileri üzerinde iyi sonuçlar almak için örnek sayısı yeterli değildir. Farklı aktivasyonlar ve katman boyutları kullanmaya çalıştı.
Ana soru, categorical_crossentropy'nin neden çalışmadığı ve doğru şekilde nasıl kullanılacağıdır.
Ayrıca, veri temsili ile ilgili bir endişe ortaya çıkıyor, bu nadir bir sıradaki basit tek çalışırken kodlanmış veriyi kullanmanın doğru yolu mu?
Yanıtlar
Çalışması için -
- Çıkış nöronlarının sayısını 02 olarak değiştirin
- Softmax'a çıkışın aktivasyonu
- OHE çıktısının tüm vektörlerini koruyun
Bu, Keras'ın dahili olarak tasarlanma şeklidir. Resmi dokümantasyon sayfasında da aynısı yazılmıştır
BinaryCrossentropy sınıfı
Yalnızca iki etiket sınıfı (0 ve 1 olduğu varsayılır) olduğunda bu çapraz entropi kaybını kullanın. Her örnek için, tahmin başına tek bir kayan nokta değeri olmalıdır. Aşağıdaki ön bilgide, dört örneğin her birinin yalnızca tek bir kayan işaretleme değeri vardır ve hem y_pred hem de y_true [batch_size] şeklindedir
CategoricalCrossentropy sınıfı
Hem y_pred hem de y_true'nun şekli [batch_size, num_classes]
Ve Sınıflandırma çoklu sınıfını korumak için tüm num_class çıktılarını birbirine göre yapmanız gerektiğini biliyoruz , bu yüzden softmax kullanıyoruz
Ref
Keras resmi sayfası
Benzer SE konu
Benzer SE konu