Saya baru-baru ini menemukan tf.nn.sparse_softmax_cross_entropy_with_logits dan saya tidak tahu apa perbedaannya dibandingkan dengan tf.nn.softmax_cross_entropy_with_logits .
Apakah satu-satunya perbedaan bahwa vektor pelatihan y
harus dienkode dengan one-hot saat menggunakan sparse_softmax_cross_entropy_with_logits
?
Membaca API, saya tidak dapat menemukan perbedaan lain apa pun dibandingkan softmax_cross_entropy_with_logits
. Tapi mengapa kita membutuhkan fungsi ekstra?
Tidakkah seharusnya softmax_cross_entropy_with_logits
menghasilkan hasil yang sama seperti sparse_softmax_cross_entropy_with_logits
, jika dilengkapi dengan data pelatihan / vektor yang dienkode dengan one-hot?
neural-network
tensorflow
softmax
cross-entropy
daniel451
sumber
sumber
Jawaban:
Memiliki dua fungsi yang berbeda sangatlah mudah , karena keduanya menghasilkan hasil yang sama.
Perbedaannya sederhana:
sparse_softmax_cross_entropy_with_logits
, label harus memiliki bentuk [batch_size] dan dtype int32 atau int64. Setiap label adalah int dalam kisaran[0, num_classes-1]
.softmax_cross_entropy_with_logits
, label harus memiliki bentuk [batch_size, num_classes] dan dtype float32 atau float64.Label yang digunakan
softmax_cross_entropy_with_logits
adalah salah satu versi terbaru dari label yang digunakansparse_softmax_cross_entropy_with_logits
.Perbedaan kecil lainnya adalah dengan
sparse_softmax_cross_entropy_with_logits
, Anda dapat memberi -1 sebagai label untuk kehilangan0
label ini.sumber
Saya hanya ingin menambahkan 2 hal pada jawaban yang diterima yang juga dapat Anda temukan di dokumentasi TF.
Pertama:
Kedua:
sumber
Kedua fungsi tersebut menghitung hasil yang sama dan sparse_softmax_cross_entropy_with_logits menghitung entropi silang secara langsung pada label renggang alih-alih mengonversinya dengan enkode one-hot .
Anda dapat memverifikasi ini dengan menjalankan program berikut:
Di sini saya membuat
logits
vektor acak dengan panjangdims
dan menghasilkan label yang dikodekan satu panas (di mana elemen dipos
adalah 1 dan lainnya adalah 0).Setelah itu saya menghitung softmax dan sparse softmax dan membandingkan hasilnya. Coba jalankan ulang beberapa kali untuk memastikan selalu menghasilkan keluaran yang sama
sumber