Softmax


import torch

import torch.nn.functional as F

x1= torch.Tensor( [ [1,2,3,4],[1,3,4,5],[3,4,5,6]])

y11= F.softmax(x, dim = 0) #對每一列進行softmax

y12 = F.softmax(x,dim =1) #對每一行進行softmax

x2 = torch.Tensor([1,2,3,4])

y2 = F.softmax(x2,dim=0)

 tf.nn.softmax中dim默認為-1,即,tf.nn.softmax會以最后一個維度作為一維向量計算softmax

softmax是什么?

        函數 Softmax(x) 也是一個 non-linearity, 但它的特殊之處在於它通常是網絡中一次操作. 這是因為它接受了一個實數向量並返回一個概率分布.其定義如下. 定義 x 是一個實數的向量(正數或負數都無所謂, 沒有限制). 然后, 第i個 Softmax(x) 的組成是
 

輸出是一個概率分布: 每個元素都是非負的, 並且所有元素的總和都是1.

2、log_softmax

在softmax的結果上再做多一次log運算

雖然在數學上等價於log(softmax(x)),但做這兩個單獨操作速度較慢,數值上也不穩定。這個函數使用另一種公式來正確計算輸出和梯度。

 

import torch
import torch.autograd as autograd
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np

data=autograd.Variable(torch.FloatTensor([1.0,2.0,3.0]))
log_softmax=F.log_softmax(data,dim=0)
print(log_softmax)

softmax=F.softmax(data,dim=0)
print(softmax)

np_softmax=softmax.data.numpy()
log_np_softmax=np.log(np_softmax)
print(log_np_softmax)

3、nn.CrossEntropyLoss() 與 NLLLoss()

 NLLLoss 的 輸入 是一個對數概率向量和一個目標標簽. 它不會為我們計算對數概率. 適合網絡的最后一層是log_softmax. 損失函數 nn.CrossEntropyLoss() 與 NLLLoss() 相同, 唯一的不同是它為我們去做 softmax.

4、log似然代價函數

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM