깊이 연구와 연습 프레임 워크 PyTorch 항목 : 학습 신경 네트워크 도구 상자 윈 장

연구 노트는이 문서에서 배울 : HTTPS : //blog.csdn.net/u011436316/article/details/101930269

autograd는 자동 차별화 시스템을 실현,하지만 깊은 학습의 바닥도이 장에서는 윈 모듈이 autograd 신경 네트워크 모듈의 상단에 내장되어 소개합니다. 윈뿐만 아니라, 우리는 신경 네트워크를 등등 최적화 Optim을 초기화 초기화와 같은 일반적으로 사용되는 도구를 소개합니다.

4.1 nn.Module

제 3 장 autograd의 사용이 깊은 학습 모델을 달성 할 수있는 언급,하지만 당신은 깊은 학습 모델을 달성하기 위해 그것을 사용하는 경우 추상화의 낮은 수준은, 당신이 작성한 코드의 큰 금액이 필요합니다. 이 경우, torch.nn는 특히 깊은 학습 모듈을 위해 설계된, 들어왔다. 신경망은 특정 층 (레이어)에서 발현 될 수있는 추상적 인 개념으로 Module1 torch.nn 코어 데이터 구조이며, 또한 뉴럴 네트워크는 많은 층들을 포함 나타낼 수있다. 실제 사용에서, 가장 일반적인 방법은 nn.Module가 자신의 네트워크 층 / 쓰기 상속. 다음 nn.Module을 사용할 수있는 방법에 대해 살펴 보자는 전체 연결 층을 실현. 완전히 연결 층라고도 아핀 층, 상기 입력 매개 변수 y를 입력 만족 X + Y = WX B, W, B 및 학습 가능하다.

import torch as t
from torch import nn
from torch.autograd import Variable as V

# 定义线性模型:y = w * x + b
class Linear(nn.Module):    # 继承nn.Module,并且在其构造函数中需调用
    #nn.Module的构造函数,即super(Linear,self).init()或nn.Module.init(self)
    def __init__(self,in_features,out_features):
        #构造函数__init__定义可学习的参数,
        #并封装成Parameter,如封装w,b成Parameter.
        #Parameter是一种特殊的Variable,但其默认需要求导(requires_grad=True)
        super(Linear,self).__init__()    # 等价于nn.Module.__init__(self)
        self.w = nn.Parameter(t.randn(in_features,out_features))#封装w
        self.b = nn.Parameter(t.randn(out_features))#封装b
        
        
    def forward(self,x):#实现前向传播过程,
        #其实输入可以是一个或多个variable,对x的操作也必须是variable支持的操作
        xw = x.mm(self.w)
        y = xw + self.b.expand_as(xw)
        #tensor.expand_as()这个函数就是
        #把一个tensor变成和函数括号内一样形状的tensor,用法与expand()类似。
        return y

net = Linear(4,3)
x = V(t.randn(2,4))
y = net(x)#将net看成函数
print(y)

다음과 같이 출력은 다음과 같습니다

tensor([[-4.6985, -2.3410, -1.2974],
        [-1.7272,  0.0638,  2.1338]], grad_fn=<AddBackward0>)

입력 :

layer=net
for name,parameter in layer.named_parameters():
    print(name,parameter) #w and b

다음과 같이 출력은 다음과 같습니다

w Parameter containing:
tensor([[-1.1190, -0.4002,  0.8744],
        [-0.7999, -0.5281, -1.0659],
        [ 0.5722, -0.7538, -0.9995],
        [-0.2019,  0.2152,  0.6807]], requires_grad=True)
b Parameter containing:
tensor([0.6568, 0.5761, 1.7080], requires_grad=True)

매우 간단한 코드의 10 개 라인을 초과하지만, 다음 사항에 유의하지 않는 전체 연결 층을 달성하기 위해 볼 수 있습니다 :

  • 선형 사용자 층은 nn.Module을 상속해야하며, 생성자는 nn.Module 필요 생성자, 즉 슈퍼 (선형, 자기) .init () 또는 nn.Module.init (자기)를 호출합니다.
  • 학습 매개 변수는 생성자 __init__ 자체에 정의하고, 패키지 매개 변수에, 우리 나 w이 경우 같이 매개 변수로 포장해야합니다. 매개 변수는 특별한 변수이지만, 기본 요청 가이드 (requires_grad = TRUE)는 관심있는 독자는 nn.Parameter를 통해 ?? 매개 변수 클래스의 소스 코드를 볼 수 있습니다.
  • 전달 함수 전에 하나 이상의 입력 변수의 임의의 동작 X는 동작 지원 가변적이어야 될 수있는 전달을 구현한다.
    이 변수 작업의 앞으로 확산이기 때문에 쓰기 다시 전파 기능 필요는 nn.Module는 훨씬 쉽게 기능보다 자동으로 전파를 autograd 사용할 수 없습니다.
  • 사용시, 당기 직관적 수학적 개념의 함수로 간주 될 수 있으며, X 결과에 대응하는 인터넷 전화 (X)을 얻을 수있다. 그것은 net.call (X)과 동등하다 __call__ 함수, 메인 호는 일부 처리를 할 수있는 후크, net.forward (X)이다. 이는 아래에서 설명하는 API의 구체적인 내용에 대신 net.forward (x)는 실제 사용에 순 (X)를 사용하는 것이 가능해야한다.
  • 학습 매개 변수의 모듈 반복자 named_parameters () 또는 매개 변수 ()에 의해 반환 될 수 있으며, 전자는 인식하기 쉽도록 만드는 각 매개 변수 이름에 연결됩니다.

눈에 보이는, 구현 기능의 사용을보다 간단 연결 층 모듈 전체 구현을 사용하기 때문에 쓰기 다시 전파 기능을 필요가 없습니다.

모듈은 자동으로 자신의 매개 변수를 감지하고 학습 매개 변수로 할 수 있습니다. 또한 매개 변수에, 모듈은 상기 모듈 부를 포함하는, 서브 마스터 모듈 모듈 재귀 룩업 파라미터. 약간 더 복잡한 네트워크에서 다음보기 : MLP.

MLP 망 구조는도. 그것은 활성화 함수로 시그 모이 드 함수를 사용하여 완전히 연결된 두 개의 층으로 이루어져있다 (도시 생략).

그림 삽입 설명 여기

class Perceptron(nn.Module):
    def __init__(self,in_features,hidden_features,out_features):
        nn.Module.__init__(self)
        self.layer1=Linear(in_features,hidden_features)
        self.layer2=Linear(hidden_features,out_features)

    def forward(self,x):
        x=self.layer1(x)
        x=t.sigmoid(x)
        #Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。
        #在信息科学中,由于其单增以及反函数单增等性质,
        #Sigmoid函数常被用作神经网络的激活函数,将变量映射到0,1之间。
        x=self.layer2(x)
        return x
perceptron=Perceptron(3,4,1)
for name,param in perceptron.named_parameters():
    #Module中的可学习参数可以通过named_parameters()或者parameters()返回迭代器,
    #前者会给每个parameter附上名字,使其更具有辨识度。
    print(name,param.size())#3.4,4,4.1,1

다음과 같이 출력은 다음과 같습니다

layer1.w torch.Size([3, 4])
layer1.b torch.Size([4])
layer2.w torch.Size([4, 1])
layer2.b torch.Size([1])

눈에 보이는 조금이라도 더 복잡한 다층 퍼셉트론은, 그것의 구현은 여전히 ​​매우 간단합니다. 그것은 다음과 같은 두 가지 지식 점을 주목해야한다.

  • __init__ 생성자 서브 모듈 현재 모듈 대상인 선행 층 선형 (모듈)을 사용하여 정의 될 수 있고, 현재의 모듈로 파라미터를 학습 할 수 있고, 파라미터를 배울 수있다.
  • 앞으로 전파 기능은 우리가 의식적으로 출력 변수함으로써 메모리를 절약, 파이썬은 중간층의 출력의 일부를 허용하기 위해 복구, X 이름이 지정됩니다. 일부 변수 이름이 덮여 만, 여전히 역 전파에 사용할 필요가 있지만 그러나 모든 중간 결과가 재활용되며, 참조 카운트를 확인하여 파이썬의 메모리 복구 모듈은 메모리의이 부분을 회수하지.

글로벌 이름의 모듈 매개 변수는 다음과 같습니다 :

  • 직접 매개 변수 이름. 일예 = self.param_name
    nn.Parameter (t.randn (3,4))라는 PARAM_NAME.
  • 매개 변수의 하위 모듈은 현재 모듈의 이름 앞에 자신의 이름을 추가합니다. 예 = self.sub_module에 들어
    서브 모듈 (), 서브 모듈은 매개 변수의 두 접합, 매개 변수 이름도 PARAM_NAME라고이
    이름은 sub_module.param_name입니다.

사용자의 편의를 위해,이 파라미터 PyTorch 캡슐화 될 수있는 파라미터, 및 구현 전달 함수 학습 nn.Module을 상속 층 뉴럴 네트워크 층의 대부분을 달성하고, 특히 CuDNN 컴퓨팅 GPU에 대해 최적화 된 속도와 성능이 매우 좋다. 모든 레이어는 상세한 설명을 nn.Module이 책이 준비되지 않은, 독자에? 확인 IPython / Jupyter의 공식 문서 또는 사용 nn.layer의 구체적인 내용을 참조 할 수 있습니다. 다음 사항에 초점을 맞추어야 설명서를 참조하십시오.

  • 이러한 nn.Linear (in_features, out_features 바이어스) 생성자의 파라미터는 다음 세 가지 파라미터의 역할 염려된다.
  • 속성, 매개 변수 및 하위 모듈을 배울 수 있습니다. 무게와 편견 nn.Linear는 두 개의 학습 매개 변수, 자식 모듈이 있습니다.
  • O의 형상은, 입력 형상 nn.Linear (N, input_features), 출력 형태 (N, output_features)는, N은 그러한 BATCH_SIZE된다.

입력 데이터는 단일 아니지만, 배치 이러한 맞춤 층은 상기 입력의 형태를 상정하고있다. 데이터 입력 (0)이 unsqueeze BATCH_SIZE의 데이터의 배치 기능 = 1로 위장 호출되어야한다.

몇 가지 일반적인 레이어의 응용 프로그램 수준에서 다음 출발, 간단한 소개가, 더 자세한 사용법은 공식 문서를 참조하십시오 할 수 있습니다.

게시 53 개 원래 기사 · 원 찬양 18 ·은 10000 +를 볼

추천

출처blog.csdn.net/YUEXILIULI/article/details/103943531