반응형
coursera pytorch 코드 내용 간단 정리
- 미분값을 알고싶은 변수는 tensor 선언동시에 requires_grad 값을 True로 설정
- backward() 함수는 미분을 적용하는 함수
- 미분함수에 변수를 넣을시 값을 얻고싶다면 .grad 로 얻을수있음
x = torch.tensor(2, requires_grad = True)
y = x**2 # y(x) = x^2 , y= 2^2 = 4
y.backward() # y'(x) = 2x 미분
x.grad # y'(x) = 2 * 2 = 4
u = torch.tensor(1, requires_grad = True)
v = torch.tensor(2, requires_grad = True)
f = u*v + u**2
f.backward() # 두개의 미분함수가 생성됨, 한개는 u에대한 미분함수, 다른한개는 v에 대한 미분함수
# 즉, u에 대한 미분식은 -> v + 2u
# v에 대한 미분식은 -> u
v.grad # 1 = 1
u.grad # 2 + 2(1) = 4
zero_grad() 함수
파이토치는 미분을 통해 얻은 기울기를 이전에 계산된 기울기 값에 누적시키는 특징이 있음. 예를들어서
import torch
w = torch.tensor(2.0, requires_grad=True)
nb_epochs = 20
for epoch in range(nb_epochs + 1):
z = 2*w
z.backward()
print('수식을 w로 미분한 값 : {}'.format(w.grad))
""" 출력은 다음과 같이
수식을 w로 미분한 값 : 2.0
수식을 w로 미분한 값 : 4.0
수식을 w로 미분한 값 : 6.0
수식을 w로 미분한 값 : 8.0
수식을 w로 미분한 값 : 10.0
수식을 w로 미분한 값 : 12.0
수식을 w로 미분한 값 : 14.0
수식을 w로 미분한 값 : 16.0
수식을 w로 미분한 값 : 18.0
수식을 w로 미분한 값 : 20.0
수식을 w로 미분한 값 : 22.0
수식을 w로 미분한 값 : 24.0
수식을 w로 미분한 값 : 26.0
수식을 w로 미분한 값 : 28.0
수식을 w로 미분한 값 : 30.0
수식을 w로 미분한 값 : 32.0
수식을 w로 미분한 값 : 34.0
수식을 w로 미분한 값 : 36.0
수식을 w로 미분한 값 : 38.0
수식을 w로 미분한 값 : 40.0
수식을 w로 미분한 값 : 42.0
"""
이렇게 누적이 되는것때문에 항상 optimizer.zero_grad()를 통해 미분값을 계속 0으로 초기화 시켜줘야함
반응형
'Data > Data Science' 카테고리의 다른 글
[ML] Anomaly Detection 알고리즘 정리 (0) | 2020.03.22 |
---|---|
[Pytorch] Linear Regression Prediction (0) | 2020.03.11 |
[Pytorch] LSTM 간단한 공부 (1) | 2020.01.04 |
[Pyspark] pyspark 내장 ML 모델사용 (0) | 2020.01.02 |
[ML] Semi-Supervised Learning (label_propagation) (0) | 2019.11.01 |