Apa arti dari fungsi model.predict dari Keras?


14

Saya telah membangun model LSTM untuk memprediksi pertanyaan duplikat pada dataset resmi Quora. Label uji adalah 0 atau 1. 1 menunjukkan pasangan pertanyaan duplikat. Setelah membangun model menggunakan model.fit, saya menguji model menggunakan model.predictpada data uji. Outputnya adalah array nilai seperti di bawah ini:

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

Saya hanya menunjukkan 10 nilai pertama dalam array. Saya tidak mengerti apa arti nilai-nilai ini dan apa label yang diprediksi untuk setiap pasangan pertanyaan?


1
Saya pikir Anda memiliki masalah di jaringan Anda .. probabilitasnya harus dalam skala 0-1 .. tetapi Anda memiliki 1,99 !, Saya pikir Anda memiliki sesuatu yang salah ..
Ghanem

Jawaban:


8

Output dari jaringan saraf tidak akan, secara default, menjadi biner - yaitu nol atau yang. Jaringan bekerja dengan nilai kontinu (bukan diskrit) untuk mengoptimalkan kerugian lebih bebas dalam kerangka gradient descent.

Lihat di sini pada pertanyaan serupa yang juga memperlihatkan beberapa kode.

Tanpa jenis penyesuaian dan penskalaan, output dari jaringan Anda kemungkinan akan jatuh di suatu tempat dalam kisaran input Anda, dalam hal nilai nominalnya. Dalam kasus Anda, itu kira-kira berkisar antara 0 dan 2.

Anda sekarang dapat menulis fungsi yang mengubah nilai Anda di atas menjadi 0 atau 1, berdasarkan beberapa ambang batas. Misalnya, skala nilai dalam kisaran [0, 1], maka jika nilainya di bawah 0,5, kembalikan 0, jika di atas 0,5, kembalikan 1.


Terima kasih, saya juga berpikir untuk menggunakan nilai ambang batas untuk mengklasifikasikan label. Tetapi apa yang harus menjadi dasar penentuan nilai ambang batas?
Dookoto_Sea

@Dookoto_Sea Anda harus memutuskannya sendiri
Jérémy Blain

@DotoToto_Sea Harap dicatat bahwa jika label Anda adalah 0 atau 1, nilai Anda harus berada dalam kisaran itu, memiliki skala nilai prediksi [0, 2] menarik, Anda perlu mengubah output model Anda
Jérémy Blain

6

Jika ini adalah masalah klasifikasi Anda harus mengubah jaringan Anda untuk memiliki 2 neuron output.

Anda dapat mengonversi label menjadi vektor terkodekan satu-panas menggunakan

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

Kemudian pastikan bahwa layer output Anda memiliki dua neuron dengan fungsi aktivasi softmax.

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

Ini akan menghasilkan Anda model.predict(x_test_reshaped)menjadi array daftar. Di mana daftar dalam adalah probabilitas instance milik masing-masing kelas. Ini akan menambahkan hingga 1 dan jelas label yang diputuskan harus menjadi neuron keluaran dengan probabilitas tertinggi.

Keras memiliki ini termasuk dalam perpustakaan mereka sehingga Anda tidak perlu melakukan perbandingan ini sendiri. Anda bisa mendapatkan label kelas secara langsung dengan menggunakan model.predict_classes(x_test_reshaped).


3
"Jika ini adalah masalah klasifikasi, Anda harus mengubah jaringan Anda untuk memiliki 2 neuron keluaran." ... maaf Jah, tetapi ia seharusnya tidak melakukannya, ia dapat melakukannya dengan satu neuron dan sigmoid alih-alih fungsi softmax.
Ghanem

@ Minion, kedua metode pada dasarnya setara, ambang batas yang seharusnya Anda lakukan dengan neuron output tunggal secara implisit tertanam dalam jaringan. Dengan demikian menyediakan output biner.
JahKnows

1
Ya saya tahu .. Saya berkomentar hanya karena ia menyebutkan: "harus mengubah jaringan Anda untuk memiliki 2 neuron output." .. thanx
Ghanem

1

Prediksi ini didasarkan pada apa yang Anda masukkan sebagai hasil pelatihan dan fungsi aktivasi.

Misalnya, dengan 0-1 input dan fungsi aktivasi sigmoid untuk output dengan kehilangan crossentropy biner, Anda akan mendapatkan probabilitas 1. Tergantung pada biaya pengambilan keputusan yang salah di kedua arah, Anda kemudian dapat memutuskan bagaimana Anda berurusan dengan probabilitas ini (mis. memprediksi kategori "1", jika probabilitasnya> 0,5 atau mungkin sudah ketika itu> 0,1).

Dari apa yang Anda gambarkan, Anda memiliki 0-1 input dan mungkin diasumsikan aktivasi linier untuk lapisan output Anda (mungkin dengan hilangnya mean-squared-error?). Ini berarti, Anda mengasumsikan masalah regresi, di mana output secara langsung merupakan angka yang diprediksi (yang dapat berupa bilangan real apa pun dari dalam ). Saya berasumsi itu bukan apa yang Anda maksudkan dan Anda mungkin menginginkan apa Saya sebutkan di paragraf pertama sebagai gantinya.(,

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.