Pytorch 에서 Softmax 와 LogSigmoid 의 비교 분석

Pytorch 에서 Softmax 와 LogSigmoid 의 대비
torch.nn.Softmax
역할:
1.Softmax 함 수 를 입력 한 n 차원 Tensor 에 적용 하고 그들의 규격 을 다시 바 꾸 어 n 차원 출력 장 량 의 요 소 를[0,1]범위 에 있 게 하고 화 해 를 1 로 한다.
2.되 돌아 오 는 Tensor 는 원래 Tensor 와 크기 가 같 고 값 은[0,1]사이 입 니 다.
3.NLLLLoss 와 함께 사용 하 는 것 을 권장 하지 않 고 LogSoftmax 로 대체 할 수 있 습 니 다.
4.Softmax 의 공식:
在这里插入图片描述
인자:
차원
예:

#        tensor
a = torch.randn(2, 3)
print(a) #   tensor
#      Softmax    ,   tensor  2         
m = nn.Softmax(dim=1)
#  a  softmax  
output = m(a)
print(output) #   tensor

tensor([[ 0.5283,  0.3922, -0.0484],
        [-1.6257, -0.4775,  0.5645]])
tensor([[0.4108, 0.3585, 0.2307],
        [0.0764, 0.2408, 0.6828]])
입력 한 tensor 의 값 이 플러스 든 마이너스 든 출력 한 tensor 의 값 은 모두 플러스 이 고 더하기 와 1 을 볼 수 있 습 니 다.
m 의 인자 dim=1 일 때 출력 된 tensor 는 원래 tensor 를 줄 에 따라 softmax 작업 을 합 니 다.m 의 인자 가 dim=0 일 때 출력 된 tensor 는 원래 tensor 를 열 에 따라 softmax 작업 을 합 니 다.
딥 러 닝 확장:
일반적으로 Softmax 함 수 는 문 제 를 분류 하 는 데 사 용 됩 니 다.예 를 들 어 VGG 등 깊이 있 는 신경 망 에서 이미지 가 일련의 볼 륨,풀 화 작업 을 거 친 후에 우 리 는 그의 특징 벡터 를 얻 을 수 있다.이 이미지 중의 물체 가 어느 유형 에 속 하 는 지 판단 하기 위해 우 리 는 이 특징 벡터 를 유형 수*각종 득점 의 형식 으로 바 꾸 고 점 수 를 확률 치 로 바 꾸 기 위해우 리 는 이 벡터 를 Softmax 로 다시 처리 할 것 이다.
torch.nn.LogSigmoid
공식:
在这里插入图片描述
함수 그림:

함수 값 이[0,-]사이 에 있 음 을 알 수 있 습 니 다.입력 값 이 클 수록 편지 수치 가 0 과 가 까 워 질 수록 어느 정도 경사도 가 사라 지 는 문 제 를 해결 하 였 습 니 다.
예:

a = [[ 0.5283,  0.3922, -0.0484],
    [-1.6257, -0.4775,  0.5645]]
a = torch.tensor(a)
lg = nn.LogSigmoid()
lgoutput = lg(a)
print(lgoutput)

tensor([[-0.4635, -0.5162, -0.7176],
        [-1.8053, -0.9601, -0.4502]])
양자 비교:

import torch
import torch.nn as nn
#   a  2*3   tensor
a = [[ 0.5283,  0.3922, -0.0484],
    [-1.6257, -0.4775,  0.5645]]
a = torch.tensor(a)
print(a)
print('a.mean:', a.mean(1, True)) #   a      

m = nn.Softmax(dim=1) #   Softmax  ,dim=1       
lg = nn.LogSigmoid() #   LogSigmoid  

output = m(a)
print(output)
#   a  Softmax        
print('output.mean:', output.mean(1, True)) 

lg_output = lg(a)
print(lg_output)
#   a  LogSigmoid        
print('lgouput.mean:', lg_output.mean(1, True)) 

#   :
tensor([[ 0.5283,  0.3922, -0.0484],
        [-1.6257, -0.4775,  0.5645]])
a.mean: tensor(-0.1111)

tensor([[0.4108, 0.3585, 0.2307],
        [0.0764, 0.2408, 0.6828]])
output.mean: tensor([[0.3333], [0.3333]]) #   Softmax        

tensor([[-0.4635, -0.5162, -0.7176],
        [-1.8053, -0.9601, -0.4502]])
lgouput.mean: tensor([[-0.5658], [-1.0719]]) #   LogSigmoid        
위 에서 알 수 있 듯 이 분류 문 제 를 계속 고려 하고 같은 데 이 터 를 Softmax 와 LogSigmoid 로 처리 한 후에 최대 확률 치 를 분류 결과 로 취하 면:
1.첫 번 째 줄 의 데 이 터 는 Softmax 를 거 친 후에 첫 번 째 유형 을 선택 합 니 다.LogSigmoid 를 거치 면 첫 번 째 를 선택 합 니 다.
2.두 번 째 줄 의 데 이 터 는 Softmax 를 거 친 후에 세 번 째 유형 을 선택 합 니 다.LogSigmoid 를 거치 면 세 번 째 를 선택 합 니 다.
3.일반적으로 양 자 는 어느 정도 차이 가 크 지 않 습 니 다.sigmoid 함수 에 경사도 가 사라 지 는 문제 가 존재 하기 때문에 사용 되 는 장면 이 많 지 않 습 니 다.
4.그러나 다 중 분류 문제 에 있어 서 Sigmoid 함 수 를 분류 함수 로 선택 할 수 있 습 니 다.Softmax 는 다 중 분류 문 제 를 처리 할 때 각 항목 의 득점 이 매우 비슷 한 상황 이 발생 하기 쉽 기 때 문 입 니 다.병목 수 치 는 실제 상황 에 따라 정할 수 있다.
N.Softmax()와 N.LogSoftmax()
N.softmax()가 계산 한 값 은 합 이 1 이 고 출력 은 확률 분포 이 며 구체 적 인 공식 은 다음 과 같다.

이 보증 수출 치 는 모두 0 보다 크 고 0,1 범위 내 에 있다.
그리고 N.LogSoftmax()공식 은 다음 과 같다.

softmax 출력 은 0-1 사이 이기 때문에 logsofmax 출력 은 0 보다 작은 수 입 니 다.
softmax 가이드:

logsofmax 가이드:

예:

import torch.nn as nn
import torch
import numpy as np

layer1=nn.Softmax()
layer2=nn.LogSoftmax()
 
input=np.asarray([2,3])
input=Variable(torch.Tensor(input))
 
output1=layer1(input)
output2=layer2(input)
print('output1:',output1)
print('output2:',output2)
출력:
output1: Variable containing:
0.2689
0.7311
[torch.FloatTensor of size 2]
output2: Variable containing:
-1.3133
-0.3133
[torch.FloatTensor of size 2]
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기