Keras'tan model.predict işlevinin çıktısı ne anlama geliyor?


15

Quora resmi veri kümesinde yinelenen soruları tahmin etmek için bir LSTM modeli oluşturdum. Test etiketleri 0 veya 1'dir. 1 soru çiftinin çift olduğunu gösterir. Kullanarak modeli oluşturduktan sonra model.fit, ben kullanarak modelin test model.predictdeney verileri üzerinde. Çıktı aşağıdaki gibi bir değer dizisidir:

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

Sadece dizideki ilk 10 değeri gösteriyorum. Bu değerlerin ne anlama geldiğini ve her soru çifti için öngörülen etiketin ne olduğunu anlamıyorum?


1
! Ben ağınızda sorunun var .. olasılıkları ölçekte 0-1 olmalıdır .. ama 1.99 var, sana bir şey yanlış olduğunu düşünüyorum ..
Ghanem

Yanıtlar:


8

Bir sinir ağının çıkışı hiçbir zaman varsayılan olarak ikili olmayacaktır - yani sıfırlar veya olanlar. Ağ, degradeyi degrade iniş çerçevesinde daha serbest bir şekilde optimize etmek için sürekli değerlerle (ayrık değil) çalışır.

Burada bazı kodları gösteren benzer bir soruya bir göz atın .

Herhangi bir ince ayar ve ölçeklendirme olmadan, ağınızın çıktısının nominal değeri açısından girdinizin aralığında bir yere düşmesi muhtemeldir. Sizin durumunuzda, bu kabaca 0 ile 2 arasında görünüyor.

Şimdi, bir eşik değer temel alınarak yukarıdaki değerlerinizi 0 veya 1'e çeviren bir işlev yazabilirsiniz. Örneğin, değerleri [0, 1] aralığında olacak şekilde ölçeklendirin, sonra değer 0,5'in altındaysa 0 değerini, 0,5'in üstünde ise 1 değerini döndürün.


Teşekkürler, ben de etiketleri sınıflandırmak için bir eşik değeri kullanmayı düşündüm. Fakat eşik değerinin kararlaştırdığı temel ne olmalıdır?
Dookoto_Sea

@Dookoto_Sea kendiniz karar vermelisiniz
Jérémy Blain

@Dookoto_Sea Etiketiniz 0 veya 1 ise, değerinizin bu aralıkta olması ve [0, 2] tahmin değerleri ölçeği olması ilgi çekici olduğunu, model çıktısını değiştirmeniz gerektiğini lütfen unutmayın
Jérémy Blain

7

Bu bir sınıflandırma sorunu ise, ağınızı 2 çıkış nöronuna sahip olacak şekilde değiştirmeniz gerekir.

Etiketleri kullanarak bir sıcak kodlanmış vektörlere dönüştürebilirsiniz

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

Ardından, çıktı katmanınızın softmax aktivasyon işlevine sahip iki nöronu olduğundan emin olun.

model.add(Dense(num_classes, activation='softmax'))

Bu, model.predict(x_test_reshaped)bir dizi liste olmanıza neden olacaktır . İç liste, her sınıfa ait bir örneğin olasılığıdır. Bu, 1'e kadar ekleyecektir ve karar verilen etiketin en yüksek olasılıklı çıkış nöronu olması gerektiği açıktır.

Keras bunu kütüphanelerine dahil ettiğinden, bu karşılaştırmayı kendiniz yapmanız gerekmez. Sınıf etiketini doğrudan kullanarak alabilirsiniz model.predict_classes(x_test_reshaped).


3
"Bu bir sınıflandırma sorunu ise, ağınızı 2 çıkış nöron olacak şekilde değiştirmelisiniz." .. Üzgünüm Jah, ama yapmamalı, softmax fonksiyonu yerine bir nöron ve sigmoid ile yapabilir.
Ghanem

@Minion, her iki yöntem de esasen eşdeğerdir, aksi takdirde tek bir çıkış nöronu ile yapmanız gereken eşikleme, ağa dolaylı olarak gömülüdür. Böylece ikili çıktı sağlar.
JahKnows

1
Evet kow .. Ben sadece şöyle dedi çünkü yorum yaptım: "ağınızı 2 çıkış nöron var değiştirmek gerekir." .. thanx
Ghanem

1

Tahminler, egzersiz çıktıları ve aktivasyon işlevi olarak ne beslediğinize dayanır.

Örneğin, 0-1 giriş ve ikili çapraz-çaprazlama kaybı olan çıkış için sigmoid aktivasyon fonksiyonu ile 1 olasılığı elde edersiniz. Kararın her iki yönde yanlış alınmasının maliyetine bağlı olarak, Bu olasılıklarla başa çıkın (örneğin, olasılık> 0.5 ise veya belki de> 0.1 olduğunda zaten "1" kategorisini tahmin edin).

(,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.