파이썬 일기 : Pytorch있는 간단한 신경 네트워크를 구축

최근 연구 pytorch 프레임 워크는 지금까지 가장을하여 pytorch 신경망과 훈련의 방법과 설정의 기본을 공유 할 수 있습니다. 그것은 공유하는이 문서를 작성하는 첫번째이었다, 나는 초보자 pytorch 친구를 도울 수 있도록 노력하겠습니다!

태스크

에서 처음 우리가 학습의 작업을 완료하기 위해 네트워크를 구축했다 ". 0, 1 다른 테이크를 복용 같은"신경 네트워크 배타적 OR 연산의하자 아카데미는, XOR 연산이 일반적으로 알려져있다 그리고 우리는 우리가 다른 걸릴 이러한 신경 네트워크를 구축 우리에게 입력 및 출력 0:00 (1,1), 출력 1 개 입력 (1,0) (0 같은 걸릴 수 있도록해야합니다, 즉, 단순히 말할 필요 ), 등등.

아이디어 둘째, 실현

우리는 두 개의 입력 및 하나 개의 출력을 할 필요가 있으므로, 두 입력 노드를 설정해야 출력 층은 입력 층의 출력 노드에 제공하기 때문이다. 문제가 비교적 간단하다, 그래서 우리는 단지 좋은 결과를 얻을 수 10 개 노드의 숨겨진 레이어를 설정해야하기 때문에 출력에 0-1로 유지되도록, 우리가 ReLU 기능을 사용하여 숨겨진 레이어의 활성화 기능, 우리는, 출력 층의 S 상 기능을 사용 출력이 0.5보다 큰 경우, 출력이 0이되도록 범위는, 1 미만 0.5를 출력 할 수있다.

셋째, 구현 과정

네트워크를 설정할 때이 방법의 빌딩 블록을 신속하고 효율적으로 신경 네트워크를 구축 할 수 있습니다, 우리는 구체적으로 다음을 달성하기 위해 신속하게 구축 할 수있는 간단한 방법을 사용하십시오

첫 번째 단계 : 필요한 라이브러리의 도입

다음과 같이 코드입니다 :

수입 토치
 수입 으로 윈 torch.nn
 수입 순이익 등 NumPy와

물론, 코드를 작성하고 토치 가방을 촉진 윈 윈 교체하기 위해, pytorch 토치 패키지에 의해 도입 될이 패키지는 신경 네트워크 패킷을하도록 설계 신경망 윈의 약자이다. NumPy와 입력으로 매트릭스를 생성하기 위해 도입 하였다.

2 단계 : 입력 세트 만들기

다음과 같이 코드입니다 :

#의 건설 입력 설정 
X = np.mat ( ' 0 0; ' 
           ' 0.1] ' 
           ' . 1 0] ' 
           ' . 1. 1 ' ) 
X = torch.tensor (X) .float () 
Y = np.mat ( ' . 1 ; ' 
           ' 0; ' 
           ' 0; ' 
           ' 1. ' ) 
Y = torch.tensor (Y)를 .float ()

나는 개인적으로 나는 물론, 다른 방법으로도 사용할 수 있습니다, 말씨가 비교적 간단 느낌 np.mat와 행렬이 방법을 구성 선호합니다. 그러나 행렬이 단계의 torch.tensor (x)를 .float ()을 구축 완료해야합니다, 당신은 텐서 변수를 생성에 입력을 넣어해야합니다.

텐서은 무엇입니까? 당신은 단순히 그가 pytorch에 사용 된 변수의 일종 이해 당신이 먼저 텐서 변수에 변수를 변환해야이 프레임 워크를 사용하려면 pytorch 수 있습니다. 그리고 사용자가 만든 np.mat 사용하는 입력 INT 타입 동안, 텐서로 변환됩니다 변수가 떠 텐서를 참조, 부동 소수점 부동 소수점을 우리는 당신이 신경망의 입력을 요구하고 출력해야합니다 itensor은 자동으로 그렇게 떠 변환된다 () 나중에 .float 추가하려면 INT 유형으로 변환.

따라서, 우리는 전체 입출력 (행렬 X 및 Y 매트릭스 임) X는 네 개의 행과 두 열의 행렬 인을 생성 한 각 행은 우리가 입력 된 경우를 넣어 그 입력, 두 개의 입력 값이며 그들은 밖으로 나와 있습니다. Y는 네 개의 행의 매트릭스의 출력이며, 각각의 행의 출력은 매트릭스 (X)에 대응하는 각 행의 입력된다.

세 번째 단계 : 네트워크 구축

다음과 같이 코드입니다 :

# 네트워크 구축 
Mynet = nn.Sequential ( 
    nn.Linear ( 2, 10 ), 
    nn.ReLU () 
    nn.Linear ( 10 ,. 1 ) 
    nn.Sigmoid () 
) 
프린트 (Mynet)

우리는 윈 연속 빌드를 네트워크 패키지 사용이 기능을 사용하면 우리가 블록에게 신경 네트워크를 구축 같은 일을 할 수 있다는 것입니다.

nn.Linear (2,10)가 입력 노드의 수를 나타내는 입력 층 구조를 의미하며, 숫자 (10)는 출력 노드를 나타낸다. 리니어 다른 활성화 기능을 포함하지 않는이 층의 의미 영어, 선형, 당신은 그가 당신에게 한강의 출력을 줄 것이다 무엇을 입력합니다. nn.ReLU ()이 함수 층의 활성화를 나타냅니다, 당신은 단지 기능에 ReLU를 던졌다 입력합니다. 그런 다음 다시 선형이, 마지막으로 S 상 기능에 던져. 2,10,1는 간단한 3 층의 수를 표현한다.

4 단계 : 설정 최적화

다음과 같이 코드입니다 :

# 설정 최적화 
optimzer = torch.optim.SGD (myNet.parameters (), LR = 0.05 ) 
loss_func = nn.MSELoss ()

이해는이 단계에서, 당신은 당신의 네트워크를 훈련 할 수있는 최적화 된 방법이 필요합니다, 그래서 우리는 최적화 방법을 설정이 단계가 사용되어야한다는 것이다.

torch.optim.SGD은 SGD 교육 방법의 사용, 당신은 그것을 필요로하고 각각 myNet.paramets와 LR을에 통과 할 수있을 것 네트워크의 매개 변수를 배울 수 있다는 것을 의미한다. 우리의 문제는 상대적으로 간단하기 때문에 loss_func 문구, 비용 기능을 설정하므로 평균 제곱 오차 비용 함수이다 MSE의 사용.

다섯 번째 단계 : 교육 네트워크

다음과 같이 코드입니다 :

위한 에포크  범위 (5000 ) : 
    OUT = Mynet (X) 
    손실 = loss_func (OUT, Y)   # 오차 산출 
    optimzer.zero_grad ()   # 클리어 그라데이션 
    loss.backward () 
    optimzer.step ()를

나는 5000의 순환을 (너무 많은 시간이 필요하지 않을 수)를 설정하려면 여기를 오전 훈련 작업을 반복 5000 있도록. 네트워크를 입력하기 위해 각 출력에 직접 myNet (X)를, 밖으로 출력으로 던져 (! 너무 단순하고 조잡) 그런 비용 함수와 표준 출력 Y는 오류를 추구합니다. 때마다 다시 반복 얻은 그라데이션의 마지막을 제거하기 위해 단계 클리어 그라데이션, 당신은 줄에이 단계를 기억하는 것, 초보자도 이해가 안 돼요. loss.backward () 과정은 다음 optimzer.step ()는 우리가 일을 설정 최적화를 수 있도록하는 것입니다, 다시 전파를 확인하는 것입니다.

6 단계 : 테스트

다음과 같이 코드입니다 :

인쇄 (myNet (X) .DATA)

출력 :

텐서 ([0.9424 ] 
        [ 0.0406 ] 
        [ 0.0400 ] 
        [ 0.9590])

우리는 물론, 당신은 또한 테스트 데이터를 변경할 수 있습니다, 예상 한 결과에 가까운 결과를 볼 수 있으며, 그 결과는 유사합니다. 우리 텐서 변수는 실제로 두 부분, 부분, 텐서 데이터로 구성되어 있기 때문에, 다른 하나는 텐서 매개 변수의 자동 유도가 왜 우리를 여기 .DATA와 코드의 끝 부분의 간단한 설명, 우리는 .DATA 의미 추가 텐서 데이터 출력에서 ​​촬영하고 출력을 다음과 같은 것하지 않을 경우 :

텐서 ([0.9492 ] 
        [ 0.0502 ] 
        [ 0.0757 ] 
        [ 0.9351], grad_fn = <SigmoidBackward>)

오늘 여기에 공유 부적절한 장소에서 작성된 블로그에 처음 게시, 또한 당신이있는 경우 초보자는 다음과 같이 전체 코드는 pytorch하기 위해, 모르는 당신에게 비판을 희망 :

오기 토치
 오기 NN AS torch.nn
 오기 NumPy와 NP AS 

#의 건설 입력 집합 
X = np.mat ( ' 0 0; ' 
           ' 0.1] ' 
           ' . 1 0] ' 
           ' . 1. 1 ' ) 
X = torch.tensor (X) .float () 
Y = np.mat ( ' 1]. ' 
           ' 0; ' 
           ' 0; ' 
           ' 1. ' ) 
Y = torch.tensor (Y) .float () 

# 접속 네트워크 
Mynet = nn.Sequential ( 
    nn.Linear (2, 10 ), 
    nn.ReLU () 
    nn.Linear ( 10 ,. 1 ) 
    nn.Sigmoid () 
) 
프린트 (Mynet) 

#에 설정된 최적화 
optimzer = torch.optim.SGD (myNet.parameters (), LR = 0.05 ) 
loss_func = nn.MSELoss () 

에 대한 에포크  범위 (5000 ) : 
    OUT = Mynet (X) 
    손실 = loss_func (OUT, Y)   # 오차 산출 
    optimzer.zero_grad ()를   # 클리어 그라데이션 
    loss.backward () 
    optimzer.step () 


인쇄 (Mynet (X 축) .DATA)

 

추천

출처www.cnblogs.com/kiwiwk/p/11711671.html