pytorch 에서 LN(LayerNorm)및 Relu 와 변 형 된 출력 동작

6610 단어 pytorchLayerNormRelu
주로 pytorch 에서 layernorm 을 사용 한 데이터 변화 와 데이터 사용 relu,prelu,leakyrelu 이후 의 변 화 를 알 아 보 는 것 입 니 다.

import torch
import torch.nn as nn
import torch.nn.functional as F
class model(nn.Module):
    def __init__(self):
        super(model, self).__init__()
        self.LN=nn.LayerNorm(10,eps=0,elementwise_affine=True)
        self.PRelu=nn.PReLU(init=0.25)
        self.Relu=nn.ReLU()
        self.LeakyReLU=nn.LeakyReLU(negative_slope=0.01,inplace=False)
    def forward(self,input ):
        out=self.LN(input)
        print("LN:",out)
        out1=self.PRelu(out)
        print("PRelu:",out1)
        out2=self.Relu(out)
        print("Relu:",out2)
        out3=self.LeakyReLU(out)
        print("LeakyRelu:",out3)
        return out
tensor=torch.tensor([-0.9,0.1,0,-0.1,0.9,-0.4,0.9,-0.5,0.8,0.1])
net=model()
print(tensor)
net(tensor)
출력:
tensor([-0.9000,  0.1000,  0.0000, -0.1000,  0.9000, -0.4000,  0.9000, -0.5000,
         0.8000,  0.1000])
LN: tensor([-1.6906,  0.0171, -0.1537, -0.3245,  1.3833, -0.8368,  1.3833, -1.0076,
         1.2125,  0.0171], grad_fn=)
Relu: tensor([0.0000, 0.0171, 0.0000, 0.0000, 1.3833, 0.0000, 1.3833, 0.0000, 1.2125,
        0.0171], grad_fn=)
PRelu: tensor([-0.4227,  0.0171, -0.0384, -0.0811,  1.3833, -0.2092,  1.3833, -0.2519,
         1.2125,  0.0171], grad_fn=)
LeakyRelu: tensor([-0.0169,  0.0171, -0.0015, -0.0032,  1.3833, -0.0084,  1.3833, -0.0101,
         1.2125,  0.0171], grad_fn=)
위 에서 알 수 있 듯 이 이 Layer Norm 의 귀 일 화 는 데 이 터 를 0-1 사이 로 한정 하 는 것 이 아니 라 고 스 분포 와 같은 점 수 를 하지 않 고 이 를 하나의 처리 만 했 을 뿐 대응 하 는 수 치 는 약간의 변 화 를 얻 었 고 같은 수치의 변화 도 똑 같 았 다.
Relu 는 단순히 0 미 만 의 수 를 0 으로 바 꿔 경사도 가 없어 질 가능성 을 줄 였 다.
PRelu 는 init 가 준 값 에 따라 어느 정도 마 이 너 스 를 유지 했다.
LeakyRelu 도 어느 정도 마이너스 가 유지 되 고 있 지만 작 습 니 다.negative 에 따 른 것 같 습 니 다.slope 가 준 값.
보충:PyTorch 학습 의 정규 화 층(BatchNorm,LayerNorm,InstanceNorm,GroupNorm)
BN,LN,IN,GN 은 학술 적 으로 차 이 를 설명 한다.
BatchNorm:batch 방향 을 획일 화하 여 NHW 의 평균 값 을 계산 하면 작은 batchsize 에 효과 가 좋 지 않 습 니 다.BN 의 주요 단점 은 batchsize 의 크기 에 민감 하 다 는 것 이다.매번 평균 값 과 방 차 는 하나의 batch 에 있 기 때문에 batchsize 가 너무 작 으 면 계 산 된 평균 값,방 차 는 전체 데이터 분 포 를 대표 하기에 부족 하 다.
Layer Norm:channel 방향 을 귀 일화 하여 CHW 의 평균 값 을 계산 하면 주로 RNN 에 대한 작용 이 뚜렷 하 다.
InstanceNorm:하나의 channel 에서 귀 일 화 를 하고 H*W 의 평균 값 을 계산 하여 스타일 화 이전 에 사용 합 니 다.이미지 스타일 화 에서 생 성 결 과 는 주로 특정한 이미지 인 스 턴 스 에 의존 하기 때문에 전체 batch 를 이미지 스타일 화 에 적합 하지 않 기 때문에 HW 를 획일 화 합 니 다.모델 의 수렴 을 가속 화하 고 모든 이미지 인 스 턴 스 간 의 독립 을 유지 할 수 있다.
GroupNorm:channel 방향 을 group 로 나 눈 다음 각 group 내 에서 귀 일 화 를 하여(C//G)HW 의 평균 값 을 계산 합 니 다.이렇게 하면 batchsize 와 상 관 없 이 제약 을 받 지 않 습 니 다.
Switchable Norm 은 BN,LN,IN 을 결합 해 가중치 를 부여 해 네트워크 스스로 귀 일화 층 이 어떤 방법 을 써 야 하 는 지 학습 하도록 하 는 것 이다.

1 BatchNorm

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm3d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
인자:
num_features:원 하 는 입력 의 특징 수 입 니 다.이 원 하 는 입력 의 크기 는'batch'입 니 다.size x num_features [x width]'
eps:수치 안정성(분모 가 가 까 워 지 거나 0 을 취하 지 못 함)을 확보 하기 위해 분모 에 가 하 는 값 입 니 다.기본 값 은 1e-5 입 니 다.
momentum:동적 평균치 와 동적 분산 에 사용 되 는 운동량.묵인 0.1.
affine:불 값,true 로 설정 하면 이 층 에 학습 가능 한 복사 변환 파 라 메 터 를 추가 합 니 다.
track_running_stats:불 값 은 true 로 설정 하고 훈련 과정 에서 의 평균 값 과 방 차 를 기록 합 니 다.
실현 공식:
track_running_stats:불 값 은 true 로 설정 하고 훈련 과정 에서 의 평균 값 과 방 차 를 기록 합 니 다.
실현 공식:
在这里插入图片描述
2 GroupNorm

torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine=True)
인자:
num_groups:그룹 으로 나 눌 필요 가 있 는 groups
num_features:원 하 는 입력 의 특징 수 입 니 다.이 원 하 는 입력 의 크기 는'batch'입 니 다.size x num_features [x width]'
eps:수치 안정성(분모 가 가 까 워 지 거나 0 을 취하 지 못 함)을 확보 하기 위해 분모 에 가 하 는 값 입 니 다.기본 값 은 1e-5 입 니 다.
momentum:동적 평균치 와 동적 분산 에 사용 되 는 운동량.묵인 0.1.
affine:불 값,true 로 설정 하면 이 층 에 학습 가능 한 복사 변환 파 라 메 터 를 추가 합 니 다.
실현 공식:
在这里插入图片描述
3 InstanceNorm

torch.nn.InstanceNorm1d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm3d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
인자:
num_features:원 하 는 입력 의 특징 수 입 니 다.이 원 하 는 입력 의 크기 는'batch'입 니 다.size x num_features [x width]'
eps:수치 안정성(분모 가 가 까 워 지 거나 0 을 취하 지 못 함)을 확보 하기 위해 분모 에 가 하 는 값 입 니 다.기본 값 은 1e-5 입 니 다.
momentum:동적 평균치 와 동적 분산 에 사용 되 는 운동량.묵인 0.1.
affine:불 값,true 로 설정 하면 이 층 에 학습 가능 한 복사 변환 파 라 메 터 를 추가 합 니 다.
track_running_stats:불 값 은 true 로 설정 하고 훈련 과정 에서 의 평균 값 과 방 차 를 기록 합 니 다.
실현 공식:
在这里插入图片描述
4 LayerNorm

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True)
인자:
normalized_shape:사이즈 입력

[∗×normalized_shape[0]×normalized_shape[1]×…×normalized_shape[−1]]
eps:수치 안정성(분모 가 가 까 워 지 거나 0 을 취하 지 못 함)을 확보 하기 위해 분모 에 가 하 는 값 입 니 다.기본 값 은 1e-5 입 니 다.
elementwise_affine:불 값,true 로 설정 하면 이 층 에 학습 가능 한 복사 변환 파 라 메 터 를 추가 합 니 다.
실현 공식:
在这里插入图片描述
5 LocalResponseNorm

torch.nn.LocalResponseNorm(size, alpha=0.0001, beta=0.75, k=1.0)
인자:
size:귀 일 화 된 이웃 채널 수
알파:곱 하기 인자,기본 값:0.0001
베타:지수,기본 값:0.75
k:추가 인자,기본 값:1
실현 공식:
在这里插入图片描述
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기