일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 좌표거리
- 파이썬
- python최단거리
- 3d데이터
- Python
- 컨테이너
- 도커 레이어
- STL
- 3d
- GCN
- GNN
- docker
- 이미지빌드
- 패치분할
- pyvista
- 귀여운고래
- 데이터입수
- geojson
- graph
- Set
- MESH
- geopandas
- 지하철역좌표
- 폴더조사
- 도커
- GIS
- 그리드분할
- osmnx
- 동명이인찾기
- 알고리즘
- Today
- Total
이것저것 기록
[DL, PyTorch] Autograd: 자동 미분 본문
PyTorch에는 Autograd라는 기특한 패키지가 있다.
깃헙에서 딥러닝 코드들을 보다보면 .requires_grad=True 라는 코드를 엄청 자주 보게 되는데, 이게 바로 Autograd라는 패키지와 연관이 있는 코드이다.
이 패키지는 Tensor의 모든 연산에 대해 자동 미분을 제공한다.
torch.Tensor는 패키지에서 가장 중심이 되는 클래스이다.
텐서의 속성 중 하나인 .requires_grad=True로 세팅하면 텐서의 모든 연산에 대해 추적을 시작한다.
계산 작업이 모두 수행되면 .backward()를 호출해서 모든 gradients를 자동으로 계산할 수 있다.
gradients들은 .grad 속성에 누적되어 저장된다.
Autograd 패키지의 동작 원리를 자세히 이해하고 싶으면 다음 링크의 영상들을 추천!
1. 예제 함수
데이터의 평균을 구하는 함수를 예제 함수로 사용!
2. 텐서(데이터) 및 함수 선언
import torch
from torch.autograd import Variable
# 텐서 선언
torch.random.manual_seed(1234)
data = torch.rand(10) * 10
print('data: {}'.format(data))
beta = torch.rand(1, requires_grad=True)
print('beta: {}'.format(beta))
#함수 선언
y = torch.mean((data - beta)**2)
print()
data변수에 위와 같이 텐서를 선언해줬다.
.manual_seed()는 변수를 무작위로 설정하되, 몇 번을 반복해도 똑같은 무작위 변수를 설정하게 해주는 코드 같은 거다.
분명히 random 설정했는데 (1234)를 넣어서 몇 번을 재실행 해도 똑같은 수가 할당됨을 확인할 수 있다.
나는 베타에 대한 그레디언트를 구하고 싶기 때문에 requires=True 라고 설정했다.
베타에 기울기 추적 옵션을 달아준 셈인데, 이렇게 하면 베타와 관련되어 생성되는 모든 텐서에 기울기 추적 옵션인 grad_fn 태그가 달려서 생성된다.
예를 들어, 함수 y는 베타를 이용해 생성됐기 때문에 y에도 역시 grad_fn이 붙어서 생성된다.
3. 기울기값 계산
기울기값을 계산하기 위해 해야하는 일은 기울기 계산을 활성화 시켜주면 된다.
y에 대한 베타의 기울기값을 구하는 것이니까 다음과 같이 .backward()를 써서 역전파를 실행해주면 된다.
# auto grad
y.backward()
print('beta.grad.item(): {}'.format(beta.grad.item()))
참고 링크
'Data Science > ML & DL' 카테고리의 다른 글
[DL, PyTorch] loss, optimizer 설정하기 (0) | 2020.10.14 |
---|---|
[DL, PyTorch] 신경망 모델 정의하기 -- Class, nn.Module (0) | 2020.10.13 |
[DL, PyTorch] 텐서 슬라이싱, 브로드캐스팅, 기본 연산 (0) | 2020.10.10 |
[DL, PyTorch] 차원 재구성 - view(), reshape() (2) | 2020.10.08 |
[DL, PyTorch] 벡터, 행렬, 텐서 (0) | 2020.10.06 |