일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python list
- #1일1영어
- object detection
- Convolution Neural Network
- #실생활 영어
- #opencv
- #Android
- convexhull
- #영어 명언
- #English
- tensorflow update
- c언어
- #일상영어
- findContours
- #실생활영어
- tokenizing
- 완전탐색
- 딥러닝
- 영어
- python __init__
- 이미지 생성
- keras
- 영어명언
- #영어
- TensorFlow
- python 알고리즘
- word embedding
- text2img
- opencv SURF
- #프로젝트
- Today
- Total
When will you grow up?
2. Pytorch - Autograd 본문
저번시간에는 Tensor에 대해 알아봤다 궁금하다면? 클릭
이번시간에는 딥러닝 라이브러리를 사용하는 이유이자, 딥러닝의 꽃? 이라고 불릴 수 있는(backpropagation?)을 자동으로 해주는 autograd에 대해 알아보자.
Autograd ?
- Tensor의 모든 연산에 대해 자동 미분을 제공하는 패키지이다.
- 실행-기반-정의 (define-by-run) 프레임워크로, 코드를 어떻게 작성하여 실행하느냐에 따라 역전파(backpropagation)가 정의된다는 것. 만약 backpropagation을 알고싶다면 클릭
- 자동 미분 계산을 위해서 torch.autograd 패키지 안에 있는 Variable을 이용해야 동작이 가능해진다.
Variable ?
- autograd.Variable 클래스가 있는데, 이는 Tensor를 wrap 있으며 ,Tensor 기반으로 정의된 거의 대부분의 연산을 지원
- 계산이 완료된 후, .backward() 함수를 호출하여 gradient를 자동으로 계산할 수 있다.
- autograd.Variable이 넓은 범위로 안에 data, grad, grad_fun로 Variable이 구성되어있는데,
data 는 Tensor형태의 데이터가 담기고, grad는 data가 거쳐온 layer에 대한 미분값이 축적되며, grad_fn는 미분 값을 계산한 함수에 대한 정보를 담고있다.
ex)
----------------------------------------------------------------------------------
import torch
from torch.autograd import Variable
a = torch.ones(2,2)
a = Variable(a, requires_grad=True) # a에 gradient값이 필요하다라는 의미
print(a) # torch.FloatTensor of size 2x2
b = a + 2
c = b**2
out = c.sum()
out.backward() # ∂out/∂a이다. 즉,out을 a로 미분해라 라는 의미.
print(a.data) # 1 1
# 1 1
print(a.grad) # 6 6
# 6 6
print(a.grad_fn) # None a가 직접적으로 수행한 연산은 없기에..
print(c.grad_fn) # pow backward object
print(out.grad_fn) # sum backward object
-------------------------------------------------------------------------------------
ex2)
import torch
from torch.autograd import Variable
x = torch.ones(3)
x = Variable(x, requires_grad=True)
y=x**2
z=y+3
grad=torch.Tensor([0.1, 1, 10])
z.backward(grad) # backward안에 값을 넣게되면 크기를 맞춰준다
print(x.grad) # 그래서 0.600, 6.000, 60.000 이 나오게 된다.
reference
https://evan-moon.github.io/2018/07/19/deep-learning-backpropagation/
https://www.youtube.com/watch?v=E0R9Xf_GyUc
'02. Study > Pytorch' 카테고리의 다른 글
[SOTA OCR] GOT OCR-2.0 (0) | 2024.10.28 |
---|---|
FLUX.1 Controlnet 사용하기 (4) | 2024.08.19 |
1. Pytorch - Tensor (0) | 2020.02.24 |