Pytorch-ANN

1 minute read

ANN

ANN 은 딥러닝에서 사용하는 인공신경망(Artificial Neural Network)이다.
대표적인 예와 그에 해당하는 이론에 대한 내용은 아래 링크를 참조하자.

  1. Perceptron
  2. MLP(NeuralNetwork)

필요한 라이브러리

1
2
3
4
5
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.init as init
import matplotlib.pyplot as plt

데이터 개수와 반복횟수 설정

1
2
num_data = 1000
num_epoch = 10000

input data, output data선언
이전 Post와 마찬가지로 균등분포와 표준정규 분포로서 input, noise선언
Target Data를 위한 식 \(y = x^2 +3\)

1
2
3
4
x = init.uniform_(torch.Tensor(num_data,1),-15,15)
noise = init.normal_(torch.FloatTensor(num_data,1),std=1)
y = x**2 + 3
y_noise = y + noise

Model 선언

nn.Sequential
torch.nn.Sequential(* args)
하나의 Container로서 Module을 서로 연결시켜주는 역할을 한다.
하나의 ordered dict of moduls라고 생각해도 된다.
여기서의 Model은 nn.Sequential을 통하여 nn.Linear와 nn.ReLU를 각 3개씩 연결하였다.

nn.ReLu
torch.nn.ReLU(inplace=False)
\(ReLU(x) = max(0,x)\)

1
2
3
4
5
6
7
8
9
model = nn.Sequential(
    nn.Linear(1,6),
    nn.ReLU(),
    nn.Linear(6,10),
    nn.ReLU(),
    nn.Linear(10,6),
    nn.ReLU(),
    nn.Linear(6,1),
)
  • Loss Function: L1Loss
  • Optimizer: SGD
1
2
loss_func = nn.L1Loss()
optimizer = optim.SGD(model.parameters(),lr=0.002)

loss_array List 선언: 나중에 matplotlib을 통하여 loss를 찍어보기 위한 변수

1
loss_array = []

Model Trainning

1
2
3
4
5
6
7
8
for i in range(num_epoch):
    optimizer.zero_grad()
    output = model(x)
    loss = loss_func(output,y_noise)
    loss.backward()
    optimizer.step()
    
    loss_array.append(loss)

결과를 위하여 시각화

1
2
plt.plot(loss_array)
plt.show()

학습 결과와 실제 Model 비교

1
2
3
4
5
plt.figure(figsize=(5,5))
plt.scatter(x,y_noise,label="Original Data")
plt.scatter(x,output.detach().numpy(),label="Model Output")
plt.legend()
plt.show()




참조: 원본코드
참조: 파이토치 첫걸음
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.

Categories:

Updated:

Leave a comment