*Memos:
- My post explains BCE(Binary Cross Entropy) Loss.
- My post explains BCEWithLogitsLoss().
- My post explains CrossEntropyLoss().
BCELoss() can get the 0D or more D tensor of the zero or more values(float
) computed by BCE Loss from the 0D or more D tensor of zero or more elements as shown below:
*Memos:
- The 1st argument for initialization is
weight
(Optional-Default:None
-Type:tensor
ofint
,float
orbool
): *Memos:- If it’s not given, it’s
1
. - It must be the 0D or more D tensor of zero or more elements.
- If it’s not given, it’s
- There is
reduction
argument for initialization(Optional-Default:'mean'
-Type:str
). *'none'
,'mean'
or'sum'
can be selected. - There are
size_average
andreduce
argument for initialization but they are deprecated. - The 1st argument is
input
(Required-Type:tensor
offloat
). *It must be0<=x<=1
. - The 2nd argument is
target
(Required-Type:tensor
offloat
). *It must be0<=y<=1
. -
input
andtarget
must be the same size otherwise there is error. - The empty 1D or more D
input
andtarget
tensor withreduction='mean'
returnnan
. - The empty 1D or more D
input
andtarget
tensor withreduction='sum'
return0.
.
<span>import</span> <span>torch</span><span>from</span> <span>torch</span> <span>import</span> <span>nn</span><span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.4</span><span>,</span> <span>0.8</span><span>,</span> <span>0.6</span><span>,</span> <span>0.3</span><span>,</span> <span>0.0</span><span>,</span> <span>0.5</span><span>])</span><span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.2</span><span>,</span> <span>0.9</span><span>,</span> <span>0.4</span><span>,</span> <span>0.1</span><span>,</span> <span>0.8</span><span>,</span> <span>0.5</span><span>])</span><span># -w*(y*log(x)+(1-y)*log(1-x)) </span> <span># -1*(0.2*log(0.4)+(1-0.2)*log(1-0.4)) </span> <span># ↓↓↓↓↓↓ </span> <span># 0.5919 + 0.3618 + 0.7541 + 0.4414 + 80.0 + 0.6931 = 82.8423 </span> <span># 82.8423 / 6 = 13.8071 </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(7.2500) </span><span>bceloss</span><span># BCELoss() </span><span>print</span><span>(</span><span>bceloss</span><span>.</span><span>weight</span><span>)</span><span># None </span><span>bceloss</span><span>.</span><span>reduction</span><span># 'mean' </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>None</span><span>,</span> <span>reduction</span><span>=</span><span>'</span><span>mean</span><span>'</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(13.8071) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>sum</span><span>'</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(82.8423) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>none</span><span>'</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor([0.5919, 0.3618, 0.7541, 0.4414, 80.0000, 0.6931]) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.</span><span>,</span> <span>1.</span><span>,</span> <span>2.</span><span>,</span> <span>3.</span><span>,</span> <span>4.</span><span>,</span> <span>5.</span><span>]))</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(54.4433) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.</span><span>]))</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(0.) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0</span><span>,</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>,</span> <span>4</span><span>,</span> <span>5</span><span>]))</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(54.4433) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0</span><span>]))</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(0.) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>True</span><span>,</span> <span>False</span><span>,</span> <span>True</span><span>,</span> <span>False</span><span>,</span> <span>True</span><span>,</span> <span>False</span><span>])</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(13.5577) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>False</span><span>]))</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(0.) </span><span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[</span><span>0.4</span><span>,</span> <span>0.8</span><span>,</span> <span>0.6</span><span>],</span> <span>[</span><span>0.3</span><span>,</span> <span>0.0</span><span>,</span> <span>0.5</span><span>]])</span><span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[</span><span>0.2</span><span>,</span> <span>0.9</span><span>,</span> <span>0.4</span><span>],</span> <span>[</span><span>0.1</span><span>,</span> <span>0.8</span><span>,</span> <span>0.5</span><span>]])</span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(13.8071) </span><span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[[</span><span>0.4</span><span>],</span> <span>[</span><span>0.8</span><span>],</span> <span>[</span><span>0.6</span><span>]],</span> <span>[[</span><span>0.3</span><span>],</span> <span>[</span><span>0.0</span><span>],</span> <span>[</span><span>0.5</span><span>]]])</span><span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[[</span><span>0.2</span><span>],</span> <span>[</span><span>0.9</span><span>],</span> <span>[</span><span>0.4</span><span>]],</span> <span>[[</span><span>0.1</span><span>],</span> <span>[</span><span>0.8</span><span>],</span> <span>[</span><span>0.5</span><span>]]])</span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(13.8071) </span><span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([])</span><span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([])</span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>mean</span><span>'</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(nan) </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>sum</span><span>'</span><span>)</span><span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span><span># tensor(0.) </span><span>import</span> <span>torch</span> <span>from</span> <span>torch</span> <span>import</span> <span>nn</span> <span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.4</span><span>,</span> <span>0.8</span><span>,</span> <span>0.6</span><span>,</span> <span>0.3</span><span>,</span> <span>0.0</span><span>,</span> <span>0.5</span><span>])</span> <span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.2</span><span>,</span> <span>0.9</span><span>,</span> <span>0.4</span><span>,</span> <span>0.1</span><span>,</span> <span>0.8</span><span>,</span> <span>0.5</span><span>])</span> <span># -w*(y*log(x)+(1-y)*log(1-x)) </span> <span># -1*(0.2*log(0.4)+(1-0.2)*log(1-0.4)) </span> <span># ↓↓↓↓↓↓ </span> <span># 0.5919 + 0.3618 + 0.7541 + 0.4414 + 80.0 + 0.6931 = 82.8423 </span> <span># 82.8423 / 6 = 13.8071 </span><span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(7.2500) </span> <span>bceloss</span> <span># BCELoss() </span> <span>print</span><span>(</span><span>bceloss</span><span>.</span><span>weight</span><span>)</span> <span># None </span> <span>bceloss</span><span>.</span><span>reduction</span> <span># 'mean' </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>None</span><span>,</span> <span>reduction</span><span>=</span><span>'</span><span>mean</span><span>'</span><span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(13.8071) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>sum</span><span>'</span><span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(82.8423) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>none</span><span>'</span><span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor([0.5919, 0.3618, 0.7541, 0.4414, 80.0000, 0.6931]) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.</span><span>,</span> <span>1.</span><span>,</span> <span>2.</span><span>,</span> <span>3.</span><span>,</span> <span>4.</span><span>,</span> <span>5.</span><span>]))</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(54.4433) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0.</span><span>]))</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(0.) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0</span><span>,</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>,</span> <span>4</span><span>,</span> <span>5</span><span>]))</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(54.4433) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>0</span><span>]))</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(0.) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span> <span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>True</span><span>,</span> <span>False</span><span>,</span> <span>True</span><span>,</span> <span>False</span><span>,</span> <span>True</span><span>,</span> <span>False</span><span>])</span> <span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(13.5577) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>weight</span><span>=</span><span>torch</span><span>.</span><span>tensor</span><span>([</span><span>False</span><span>]))</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(0.) </span> <span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[</span><span>0.4</span><span>,</span> <span>0.8</span><span>,</span> <span>0.6</span><span>],</span> <span>[</span><span>0.3</span><span>,</span> <span>0.0</span><span>,</span> <span>0.5</span><span>]])</span> <span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[</span><span>0.2</span><span>,</span> <span>0.9</span><span>,</span> <span>0.4</span><span>],</span> <span>[</span><span>0.1</span><span>,</span> <span>0.8</span><span>,</span> <span>0.5</span><span>]])</span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(13.8071) </span> <span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[[</span><span>0.4</span><span>],</span> <span>[</span><span>0.8</span><span>],</span> <span>[</span><span>0.6</span><span>]],</span> <span>[[</span><span>0.3</span><span>],</span> <span>[</span><span>0.0</span><span>],</span> <span>[</span><span>0.5</span><span>]]])</span> <span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([[[</span><span>0.2</span><span>],</span> <span>[</span><span>0.9</span><span>],</span> <span>[</span><span>0.4</span><span>]],</span> <span>[[</span><span>0.1</span><span>],</span> <span>[</span><span>0.8</span><span>],</span> <span>[</span><span>0.5</span><span>]]])</span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>()</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(13.8071) </span> <span>tensor1</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([])</span> <span>tensor2</span> <span>=</span> <span>torch</span><span>.</span><span>tensor</span><span>([])</span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>mean</span><span>'</span><span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(nan) </span> <span>bceloss</span> <span>=</span> <span>nn</span><span>.</span><span>BCELoss</span><span>(</span><span>reduction</span><span>=</span><span>'</span><span>sum</span><span>'</span><span>)</span> <span>bceloss</span><span>(</span><span>input</span><span>=</span><span>tensor1</span><span>,</span> <span>target</span><span>=</span><span>tensor2</span><span>)</span> <span># tensor(0.) </span>import torch from torch import nn tensor1 = torch.tensor([0.4, 0.8, 0.6, 0.3, 0.0, 0.5]) tensor2 = torch.tensor([0.2, 0.9, 0.4, 0.1, 0.8, 0.5]) # -w*(y*log(x)+(1-y)*log(1-x)) # -1*(0.2*log(0.4)+(1-0.2)*log(1-0.4)) # ↓↓↓↓↓↓ # 0.5919 + 0.3618 + 0.7541 + 0.4414 + 80.0 + 0.6931 = 82.8423 # 82.8423 / 6 = 13.8071 bceloss = nn.BCELoss() bceloss(input=tensor1, target=tensor2) # tensor(7.2500) bceloss # BCELoss() print(bceloss.weight) # None bceloss.reduction # 'mean' bceloss = nn.BCELoss(weight=None, reduction='mean') bceloss(input=tensor1, target=tensor2) # tensor(13.8071) bceloss = nn.BCELoss(reduction='sum') bceloss(input=tensor1, target=tensor2) # tensor(82.8423) bceloss = nn.BCELoss(reduction='none') bceloss(input=tensor1, target=tensor2) # tensor([0.5919, 0.3618, 0.7541, 0.4414, 80.0000, 0.6931]) bceloss = nn.BCELoss(weight=torch.tensor([0., 1., 2., 3., 4., 5.])) bceloss(input=tensor1, target=tensor2) # tensor(54.4433) bceloss = nn.BCELoss(weight=torch.tensor([0.])) bceloss(input=tensor1, target=tensor2) # tensor(0.) bceloss = nn.BCELoss(weight=torch.tensor([0, 1, 2, 3, 4, 5])) bceloss(input=tensor1, target=tensor2) # tensor(54.4433) bceloss = nn.BCELoss(weight=torch.tensor([0])) bceloss(input=tensor1, target=tensor2) # tensor(0.) bceloss = nn.BCELoss( weight=torch.tensor([True, False, True, False, True, False]) ) bceloss(input=tensor1, target=tensor2) # tensor(13.5577) bceloss = nn.BCELoss(weight=torch.tensor([False])) bceloss(input=tensor1, target=tensor2) # tensor(0.) tensor1 = torch.tensor([[0.4, 0.8, 0.6], [0.3, 0.0, 0.5]]) tensor2 = torch.tensor([[0.2, 0.9, 0.4], [0.1, 0.8, 0.5]]) bceloss = nn.BCELoss() bceloss(input=tensor1, target=tensor2) # tensor(13.8071) tensor1 = torch.tensor([[[0.4], [0.8], [0.6]], [[0.3], [0.0], [0.5]]]) tensor2 = torch.tensor([[[0.2], [0.9], [0.4]], [[0.1], [0.8], [0.5]]]) bceloss = nn.BCELoss() bceloss(input=tensor1, target=tensor2) # tensor(13.8071) tensor1 = torch.tensor([]) tensor2 = torch.tensor([]) bceloss = nn.BCELoss(reduction='mean') bceloss(input=tensor1, target=tensor2) # tensor(nan) bceloss = nn.BCELoss(reduction='sum') bceloss(input=tensor1, target=tensor2) # tensor(0.)
Enter fullscreen mode Exit fullscreen mode
原文链接:BCELoss in PyTorch
© 版权声明
THE END
暂无评论内容