Pytorch-ANN
ANN
ANN 은 딥러닝에서 사용하는 인공신경망(Artificial Neural Network)이다.
대표적인 예와 그에 해당하는 이론에 대한 내용은 아래 링크를 참조하자.
필요한 라이브러리
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을 남겨주세요.
Leave a comment