본문 바로가기

Data/Data Science

[Pytorch] Differentiation in Pytorch

반응형

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으로 초기화 시켜줘야함

반응형