[파이토치 첫걸음] #1 선형 회귀와 심층 신경망
최건호 선생님의 파이토치 첫걸음이란 책으로 파이토치의 사용법을 익히려고 한다.
선형회귀
파이토치에서 텐서 사용
torch.tensor 함수는 인수로 data, dtype, device, requires_grad 등을 받는다. data에는 배열, dtype에는 자료형이 들어간다.
자료형은 다음과 같다.
device는 이 텐서를 어느 기기에 올릴 것인지를 정하고, requires_grad는 이 텐서에 대한 기울기를 저장할지의 여부를 정한다.
import torch
x = torch.Tensor(data=[2.0,3.0], requires_grad=True)
y = x**2
z = 2*y+3
target = torch.tensor(3.0,4.0)
loss = torch.sum(torch.abs(z - target))
loss.backward()
print(x.grad, y.grad, z.grad)
# tensor([8., 12.]) None None
선형회귀분석 모델 만들기
import torch
import torch.nn as nn # 신경망 모델들
import torch.optim as optim # 경사하강법 알고리즘
import torch.nn.init as init # 텐서에 초기값을 주기 위해 필요한 함수들
num_data = 1000 # 사용할 데이터수
num_epoch = 500 # 경사하강법 반복 횟수
# 1000,1 모양의 텐서를 -10, 10 사이 숫자들로
x = init.uniform_(torch.Tensor(num_data,1),-10,10)
# 평균이 1이고 표준편차가 1인 노이즈
noise = init.normal_(torch.FloatTensor(num_data,1),std=1)
y = 2*x+3 # -17에서 23사이 숫자들
y_noise = 2*(x+noise)+3 # 현실성을 반영하기 위해 노이즈를 추가
model = nn.Linear(1,1) # 1개의 특성을 가진 인풋과 1개의 특성을 가진 아웃풋
loss_func = nn.L1Loss() # L1손실
optimizer = optim.SGD(model.parameters(), lr=0.01) # 파라미터 변수와, 학습률
label = y_noise
for i in range(num_epoch):
optimizer.zero_grad() # 기울기 초기화
output = model(x)
loss = loss_func(output, label)
loss.backward() # w,b에 대한 기울기 계산
optimizer.step() # w = w - 계산값
if i % 10 == 0:
print(loss.data)
인공 신경망
인공신경망 구현해보기
import torch
import torch.nn as nn # 신경망 모델들
import torch.optim as optim # 경사하강법 알고리즘
import torch.nn.init as init # 텐서에 초기값을 주기 위해 필요한 함수들
num_data = 1000 # 사용할 데이터수
num_epoch = 10000 # 경사하강법 반복 횟수
# 1000,1 모양의 텐서를 -15, 15 사이 숫자들로
x = init.uniform_(torch.Tensor(num_data,1),-15,15)
# 평균이 1이고 표준편차가 1인 노이즈
noise = init.normal_(torch.FloatTensor(num_data,1),std=1)
y = (x**2)+3
y_noise = y + noise # 현실성을 반영하기 위해 노이즈를 추가
# sequential로 묶어서 쓰기
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_func = nn.L1Loss()
optimizer = optim.SGD(model.parameters(), lr=0.0002)
loss_array=[]
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)
Author And Source
이 문제에 관하여([파이토치 첫걸음] #1 선형 회귀와 심층 신경망), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@clayryu328/파이토치-첫걸음-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)