웹 개발 메모장

2. Pytorch autograd와 Variable 본문

옛날../pytorch

2. Pytorch autograd와 Variable

도로롱주 2019. 7. 21. 22:45

 

autograd

Auto Gradient

  • autograd를 사용하면 backprop을 위한 미분 값을 자동으로 계산해 줍니다.
  • 자동 계산을 위해서 사용하는 변수는 torch.autograd에 있는 Variable 입니다.

역전파(backpropagation)

복잡한 함수에 대해 텐서들 마다 각각 편미분을 진행하려면 연산량이 엄청나기 때문에, 합성 함수 미분의 성질을 이용하여 훨씬 적은 연산만으로 각 텐서들에 대한 미분을 구하는 방법입니다.
여기서 역전파에 대한 자세한 내용을 다루지는 않겠습니다.

Variable의 모습

  • torch.aurograd.Variable()을 통해 Variable을 생성합니다.

    import torch
    import numpy as np
    a = torch.Tensor(np.array([[1]]))
    a = torch.autograd.Variable(a, requires_grad=True)
  • Variable은 아래와 같은 속성들을 갖고 있습니다.
    .backward() 가 호출되면 미분이 시작되고 그 정보가 담기게 됩니다.

  1. data
    Tensor 형태의 데이터
  2. grad
    Data가 거쳐온 layer에 대한 미분 값
  3. grad_fn
    미분 값을 계산한 함수에 대한 정보

예시

식 d를 a에 대해 미분한 결과를 보여주는 예제입니다.

import torch
import numpy as np

a = torch.Tensor(np.array([[1]]))
a = torch.autograd.Variable(a, requires_grad=True)

b = a + 2
c = b**2
d = c*3

d.backward()

print("="*50)
print("d.data:", d.data)
print("d.grad:", d.grad)
print("d.grad_fn:", d.grad_fn)

print("="*50)
print("c.data:", c.data)
print("c.grad:", c.grad)
print("c.grad_fn:", c.grad_fn)

print("="*50)
print("b.data:", b.data)
print("b.grad:", b.grad)
print("b.grad_fn:", b.grad_fn)

print("="*50)
print("a.data:", a.data)
print("a.grad:", a.grad)
print("a.grad_fn:", a.grad_fn)

위 코드의 실행 결과입니다.

==================================================
d.data: tensor([[27.]])
d.grad: None
d.grad_fn: <MulBackward0 object at 0x0000025A0F43ABE0>
==================================================
c.data: tensor([[9.]])
c.grad: None
c.grad_fn: <PowBackward0 object at 0x0000025A0F43AC18>
==================================================
b.data: tensor([[3.]])
b.grad: None
b.grad_fn: <AddBackward0 object at 0x0000025A0F43AF60>
==================================================
a.data: tensor([[1.]])
a.grad: tensor([[18.]])
a.grad_fn: None
[Finished in 0.5s]

참고: 김군이(https://www.youtube.com/watch?v=VKhFeh92eps)

'옛날.. > pytorch' 카테고리의 다른 글

6. 신경망 학습과 평가  (0) 2019.07.22
5. 신경망 정의와 순방향 전파  (0) 2019.07.22
4. Pytorch torchvision에서 데이터셋 가져오기  (0) 2019.07.21
3. Pytorch nn과 nn.functional  (1) 2019.07.21
1. Pytorch 소개  (0) 2019.07.21
Comments