Sparse_categorical_crossentropy vsategical_crossentropy (keras, akurasi)

20

Yang lebih baik untuk akurasi atau mereka sama? Tentu saja, jika Anda menggunakanategical_crossentropy Anda menggunakan satu penyandian panas, dan jika Anda menggunakan sparse_categorical_crossentropy Anda menyandikan sebagai bilangan bulat normal. Selain itu, kapan yang lebih baik dari yang lain?

Tuan M
sumber

Jawaban:

26

Gunakan crossentropy kategori jarang ketika kelas Anda saling eksklusif (misalnya ketika masing-masing sampel milik tepat satu kelas) dan crossentropy kategoris ketika satu sampel dapat memiliki beberapa kelas atau label adalah probabilitas lunak (seperti [0,5, 0,3, 0,2]).

Rumus untuk crossentropy kategorikal (sampel S, kelas C, sampel sampel milik kelas c) adalah:sc

-1NsScC1sclHaighal(sc)

Untuk kasus ketika kelas eksklusif, Anda tidak perlu menjumlahkannya - untuk setiap sampel hanya nilai bukan nol yang hanya untuk kelas benar c.-lHaighal(sc)

Ini memungkinkan Anda menghemat waktu dan memori. Pertimbangkan kasus kelas 10000 ketika mereka saling eksklusif - hanya 1 log daripada menjumlahkan 10.000 untuk setiap sampel, hanya satu bilangan bulat bukan 10.000 mengapung.

Formula sama dalam kedua kasus, jadi tidak ada dampak pada keakuratan yang seharusnya ada.

frenzykryger
sumber
1
Apakah mereka memengaruhi akurasi secara berbeda, misalnya pada dataset angka mnist?
Master M
1
Secara matematis tidak ada perbedaan. Jika ada perbedaan signifikan dalam nilai yang dihitung oleh implementasi (katakan tensorflow atau pytorch), maka ini terdengar seperti bug. Perbandingan sederhana pada data acak (1000 kelas, 10.000 sampel) tidak menunjukkan perbedaan.
frenzykryger
Kamu benar. Terima kasih!
frenzykryger
@frenzykryger Saya sedang mengerjakan masalah multi-output. Saya memiliki 3 output terpisah o1,o2,o3dan masing-masing memiliki 167,11,7kelas masing-masing. Saya sudah membaca jawaban Anda bahwa itu tidak akan membuat perbedaan tetapi apakah ada perbedaan apakah saya menggunakan sparse__atau tidak. Bisakah saya memilih categorical2 yang terakhir dan sparseyang pertama karena ada 167 kelas di kelas pertama?
Deshwal
5

Jawabannya, Singkatnya

Jika target Anda dikodekan satu-panas, gunakan kategorical_crossentropy. Contoh penyandian satu panas:

[1,0,0]
[0,1,0] 
[0,0,1]

Tetapi jika target Anda bilangan bulat, gunakan sparse_categorical_crossentropy. Contoh pengkodean bilangan bulat (untuk penyelesaian):

1
2
3
pengguna78035
sumber
Apakah saya memerlukan simpul output tunggal sparse_categorical_crossentropy? Dan apa arti from_logitsargumen itu?
Leevo