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.predict
pada 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?
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
sumber
sumber
Jawaban:
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.
sumber
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
Kemudian pastikan bahwa layer output Anda memiliki dua neuron dengan fungsi aktivasi 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)
.sumber
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.(−∞,∞
sumber