이 있습 방법을 최적화하는 계산의 베르누이 로그 우도에 대한 많은 변수 샘플입니까?

0

질문

나는 현재 두 개의 횃불 Tensors, px는 모두의 모양 (batch_size, input_size).

내가를 계산하고 싶은 베르누이 로그 우도 주어진 데이터에 대한 반환 텐서의 크기 (batch_size)

여기서 무엇을 하고 싶: 나는에 대한 공식을 로그 우도의 베르누이 Random variables:

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

p텐서: [[0.6 0.4 0], [0.33 0.34 0.33]] 고 말하는 내가 x 텐서에 대한 바이너리에 따라 입력 사람들 확률:

[[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) 할 최종 요약 사로그램은 그것이 가능한 베르누이의 로그-가능성 계산에 사용하지 않고의 루? 또는 사용에서 가장 위해 1 니까? 내가 노력 벡터화 이 작업으로 많이 가능합니다. 나는 맹세할 수 있었 우리가 사용할 수 있는 라텍스 방정식에 대한 전았고,무언가를 변경 또는 다른 웹사이트가 있는가?

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

최고의 응답

1

지는 것이 좋습니다되지 않습니다,당신은 직접 사용할 수 있는 공식에서 텐서 다음과 같습니다(작품이기 때문에 이러한 요소를 현명한 작업):

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 니다.

더 나은 방법을 사용하는 것입 BCELossnn 모듈 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 계산 기원전으로 손실을,그것 앞에 추가의식과 부정적인 표시입니다. 특성 reduction='none' 말하는 내가 원하지 않는 계산 손실 감소(평균/요약)에 배치로서 모든 방법입니다. 이를 사용하는 것이 좋습니다 때문에 우리는 필요하지 않을 수동으로 돌의 숫자의 안정성과 오류 처리(추가 eps 니다.)

할 수 있는지 확인 두 가지 해결책이 실제로 동일한 텐서(개까지 허용 범위):

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ý
..................................................................................................................