Pytorch 에서 Softmax 와 LogSigmoid 의 비교 분석
5110 단어 PytorchSoftmaxLogSigmoid
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]
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytorch는 cpu와 gpu의 사용을 어떻게 전환하는지 상세히 설명합니다.앞에서 말했듯이pytorch에서 서버에 있는 gpu가 점용될 때 우리는 먼저 cpu로 코드를 디버깅하고 싶을 때가 많다. 그러면 gpu와 cpu의 전환이 필요하다. 장치를 가변 매개 변수로 사용하려면argparse를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.