Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 일기
- 프롬프트
- Programmers
- 프로그래머스
- 코딩테스트
- Django
- 기계학습
- machinelearning
- GPT
- BFS
- 부스트캠프
- Linear Model
- deque
- Linear Regression
- prompt engineering
- LLM
- 머신러닝
- NLP
- 파이썬
- 알고리즘
- attention
- rnn
- transformer
- Deeplearning
- LeetCode
- gradient descent
- 코테
- dl
- Python
- ChatGPT
Archives
- Today
- Total
크크루쿠쿠
Pytorch AutoGrad & Optimizer 본문
논문을 구현해 보자!
-> 반복의 연속이다!
Layer = Block
이러한 Layer(Block) 들의 반복이다.
torch.nn.Module
딥러닝을 구성하는 Layer의 base class
학습의 대상이 되는 parameter(weight) 정의
nn.Parameter
- Tensor 객체의 상속 객체
- nn.Module 에서 attribute 가 될 때 required_grad=True 가 지정되어서 학습 대상이 되는 Tensor -> AutoGrad 대상
- 우리가 직접 지정할 일은 잘 없음.
ex) XW+b
class MyLiner(nn.Module):
def __init__(self, in_features, out_features, bias=True):
super().__init__()
self.in_features = in_features
self.out_features = out_features
self.weights = nn.Parameter(
torch.randn(in_features, out_features))
self.bias = nn.Parameter(torch.randn(out_features))
def forward(self, x : Tensor):
return x @ self.weights + self.bias
Backward
- Layer에 있는 Parameter들의 미분을 수행
- Forward의 결과값과 실제값 간의 차이 (loss)에 대해 미분을 수행 후 Parameter 업데이트
for epoch in range(epochs):
inputs = Variable(torch.from_numpy(x_train))
labels = Variable(torch.from_numpy(y_train))
# Clear gradient buffers because we don't want any gradient from previous epoch to carry forward, dont want to cummulate gradients
optimizer.zero_grad()
# get output from the model, given the inputs
outputs = model(inputs)
# get loss for the predicted output
loss = criterion(outputs, labels)
print(loss)
# get gradients w.r.t to parameters
loss.backward()
# update parameters
optimizer.step()
print('epoch {}, loss {}'.format(epoch, loss.item()))
학습시 이러한 단계들을 반드시 거쳐야함.
backward 과정도 module 단에서 직접 설정 가능.
-> 미분과정을 직접 적어야 해서 힘듦.
def backward(self, x, yhat, y):
## compute backward
self.grads["dw"] = (1/x.shape[1]) * torch.mm(x, (yhat - y).T)
self.grads["db"] = (1/x.shape[1]) * torch.sum(yhat - y)
def optimize(self):
## optimization step
self.w = self.w - self.lr * self.grads["dw"]
self.b = self.b - self.lr * self.grads["db"]
'DeepLearning > 부스트캠프 AI Tech' 카테고리의 다른 글
Pytorch model 불러오기(transfer learning) (0) | 2021.08.19 |
---|---|
Pytorch Dataset & Dataloader (0) | 2021.08.18 |
Pytorch Project Architecture (0) | 2021.08.17 |
Pytorch Basics (0) | 2021.08.17 |
Generative Models (0) | 2021.08.13 |
Comments