Apa penjelasan intuitif dari parameter reduksi dalam fungsi kerugian kemungkinan log negatif di PyTorch? Parameter dapat mengambil nilai seperti 'mean' atau 'sum'. Apakah itu menjumlahkan elemen-elemen batch?

torch.nn.functional.nll_loss(outputs.mean(0), target, reduction="sum")
1
cerebrou 8 Agustus 2019, 18:07

1 menjawab

Jawaban Terbaik

Dari dokumentasi:

Menentukan pengurangan untuk diterapkan pada output: 'none' | 'berarti' | 'jumlah'. 'none': tidak ada pengurangan yang akan diterapkan, 'mean': jumlah output akan dibagi dengan jumlah elemen dalam output, 'sum': output akan dijumlahkan. Catatan: size_average dan reduce sedang dalam proses tidak digunakan lagi, dan sementara itu, menentukan salah satu dari dua argumen tersebut akan menimpa pengurangan. Bawaan: 'berarti'

Jika Anda tidak menggunakan apa pun, hasilnya akan sama dengan ukuran batch,

Jika Anda menggunakan mean, itu akan menjadi mean (jumlah dibagi dengan batch)

Jika Anda menggunakan jumlah, itu akan menjadi jumlah dari semua elemen.

Anda juga dapat memverifikasi ini dengan kode berikut:

import torch 
logit = torch.rand(100,10)
target = torch.randint(10, size=(100,)) 
m = torch.nn.functional.nll_loss(logit, target)
s = torch.nn.functional.nll_loss(logit, target, reduction="sum") 
l = torch.nn.functional.nll_loss(logit, target, reduction="none")
print(torch.abs(m-s/100))
print(torch.abs(l.mean()-m))

Outputnya harus 0 atau sangat dekat dengan 0.

2
Umang Gupta 8 Agustus 2019, 15:32