앞에서 PyTorch 개념을 살펴봤다면, 이번 편에서는 실제로 손을 한번 움직여보는 시간을 가져보자.
딥러닝을 처음 공부하면 개념은 익숙해도 “어디서부터 코드를 써야 할지” 막막할 수 있다.
그래서 이번 실습은 정말 기본적인 흐름만 담았다.
주제는 세 가지다.
- 텐서 만들기
- 텐서 연산
- 아주 간단한 신경망 만들어보기
이 세 가지는 PyTorch를 공부할 때 가장 기초적인 단계다.
1. 텐서 만들기
딥러닝 계산의 기본은 텐서다.
리스트와 비슷해 보이지만, GPU에서 빠르게 계산하도록 만들어진 자료형이다.
기본적인 텐서는 이렇게 만든다.
import torch
# 1차원 텐서
x = torch.tensor([1, 2, 3])
print(x)
# 2차원 텐서
y = torch.tensor([[1., 2.], [3., 4.]])
print(y)
텐서는 GPU로 이동시킬 수 있다는 점도 중요하다.
x = x.to("cuda")
이 한 줄로 이후 모든 계산이 GPU에서 실행된다.
2. 텐서 연산
텐서는 수학 행렬 연산을 빠르게 처리하기 위해 만들어졌다.
가장 기본적인 연산은 다음과 같다.
a = torch.tensor([1., 2., 3.])
b = torch.tensor([4., 5., 6.])
# 요소별 연산
print(a + b)
print(a * b)
# 행렬 연산
m1 = torch.tensor([[1., 2.], [3., 4.]])
m2 = torch.tensor([[5., 6.], [7., 8.]])
print(torch.matmul(m1, m2))
이 정도 연산만 이해해도 딥러닝 내부에서 어떤 계산이 일어나는지 감이 잡힌다.
3. 아주 간단한 신경망 만들어보기
PyTorch의 핵심은 “모델을 클래스로 정의해서 직접 만들 수 있다”는 점이다.
이번 실습에서는 입력 1개, 출력 1개인 가장 단순한 신경망을 만들어보자.
1) 모델 정의
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.layer = nn.Linear(1, 1)
def forward(self, x):
return self.layer(x)
이 모델은 말 그대로 선형 회귀 모델이다.
입력값에 가중치를 곱하고 편향을 더해 출력값을 만드는 구조다.
2) 학습 데이터 준비
예를 들어 입력 1 → 출력 2, 입력 2 → 출력 4 같은 패턴을 학습시키고 싶다고 하자.
x = torch.tensor([[1.], [2.], [3.]])
y = torch.tensor([[2.], [4.], [6.]])
3) 손실 함수와 옵티마이저 설정
model = SimpleNet()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
4) 학습 루프
PyTorch의 전형적인 학습 패턴이다.
for epoch in range(100):
optimizer.zero_grad() # 기울기 초기화
pred = model(x) # 예측
loss = criterion(pred, y) # 손실 계산
loss.backward() # 역전파
optimizer.step() # 가중치 업데이트
이 과정을 반복하면 모델이 점점 더 정확하게 패턴을 맞추기 시작한다.
5) 결과 확인
print(model(x))
학습이 잘 진행됐다면
입력 1, 2, 3의 출력이 2, 4, 6과 비슷하게 나온다.
4. 이 정도만 해보면
위에서 했던 작은 예제가 앞으로 배우는 딥러닝의 모든 구조와 연결된다.
- 텐서로 데이터를 만들고
- 모델 클래스를 정의하고
- 학습 루프를 돌리는 과정
LLM 같은 거대한 모델도 결국 이 구조를 훨씬 크게 확장한 것뿐이다.
이 세 가지 흐름만 익히면 PyTorch를 이해하는 데 필요한 기초는 충분하다.