वहाँ एक तरीका है करने के लिए अनुकूलन की गणना Bernoulli लॉग इन Likelihoods के लिए कई बहुभिन्नरूपी नमूने?

0

सवाल

मैं वर्तमान में दो मशाल Tensors, p और xहै , जो दोनों के आकार है (batch_size, input_size).

मैं चाहूँगा की गणना करने के लिए Bernoulli लॉग इन likelihoods दिए गए डेटा के लिए, और वापस एक tensor के आकार (batch_size)

यहाँ का एक उदाहरण है क्या मैं क्या करना चाहते हैं: मैं सूत्र के लिए लॉग इन likelihoods के Bernoulli यादृच्छिक चर:

\sum_i^d x_{i} ln(p_i) + (1-x_i) ln (1-p_i)

कहते हैं कि मैं pTensor: [[0.6 0.4 0], [0.33 0.34 0.33]] और मैं कहना है x tensor के लिए बाइनरी आदानों के आधार पर उन संभावनाओं:

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

और मैं करना चाहते हैं की गणना करने के लिए लॉग संभावना के लिए हर नमूना है, जो में परिणाम होगा:

[[ln(0.6)+ln(0.4)], [ln(0.67)+ln(0.34)+ln(0.33)]]

यह संभव हो सकता है ऐसा करने के लिए अभिकलन के उपयोग के बिना छोरों के लिए? मुझे पता है कि मैं का उपयोग कर सकता है torch.sum(axis=1) ऐसा करने के लिए अंतिम योग के बीच के लॉग, लेकिन यह संभव है करने के लिए Bernoulli लॉग-संभावना गणना के उपयोग के बिना छोरों के लिए? का उपयोग करें या अधिक से अधिक 1 पाश के लिए? मैं कोशिश कर रहा हूँ करने के लिए vectorize इस आपरेशन के रूप में ज्यादा के रूप में संभव है. मैं कर सकता हूँ शपथ ली कि हम का उपयोग कर सकता है लेटेक्स के लिए समीकरण से पहले, क्या कुछ बदल रहा है या यह एक और वेबसाइट है?

log-likelihood math pytorch
2021-11-24 00:17:07
1

सबसे अच्छा जवाब

1

हालांकि एक अच्छा अभ्यास नहीं है, आप सीधे उपयोग कर सकते हैं सूत्र पर भी tensors इस प्रकार के रूप में (काम करता है, क्योंकि ये तत्व बुद्धिमान संचालन):

import torch
p = torch.tensor([
    [0.6, 0.4, 0],
    [0.33, 0.34, 0.33]
])

x = torch.tensor([
    [1., 1, 0],
    [0, 1, 1]
])

eps = 1e-8
bll1 = (x * torch.log(p+eps) + (1-x) * torch.log(1-p+eps)).sum(axis=1)
print(bll1)
#tensor([-1.4271162748, -2.5879497528])

ध्यान दें कि करने के लिए से बचने के log(0) त्रुटि, मैं शुरू की है एक बहुत छोटा सा निरंतर eps यह अंदर.

एक बेहतर तरीका है यह करने के लिए उपयोग करने के लिए BCELoss के अंदर nn मॉड्यूल में pytorch.

import torch.nn as nn
bce = nn.BCELoss(reduction='none')
bll2 = -bce(p, x).sum(axis=1)
print(bll2)
#tensor([-1.4271162748, -2.5879497528])

के बाद से pytorch की गणना के लिए ईसा पूर्व के रूप में एक नुकसानमें, यह prepends अपने सूत्र के साथ एक नकारात्मक संकेत है । विशेषता reduction='none' कहते हैं कि मैं नहीं करना चाहते हैं, गणना करने के लिए घाटे को कम किया जा (औसत/माथुर) के पार बैच में किसी भी तरह से. यह सलाह दी जाती है का उपयोग करने के लिए के बाद से हम की जरूरत नहीं करने के लिए मैन्युअल रूप से देखभाल के संख्यात्मक स्थिरता और त्रुटि से निपटने (इस तरह के रूप में जोड़ने eps ऊपर.)

आप वास्तव में कर सकते हैं सत्यापित करें कि दो समाधान वास्तव में वापस ही tensor (तक एक सहिष्णुता):

torch.allclose(bll1, bll2)
# True

या tensors के बिना (संक्षेप में प्रत्येक पंक्ति):

torch.allclose((x * torch.log(p+eps) + (1-x) * torch.log(1-p+eps)), -bce(p, x))
# True

पूछने के लिए स्वतंत्र महसूस और आगे स्पष्टीकरण के लिए.

2021-11-25 03:42:35

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में