: Tensor형태의 데이터가 담김
: Data가 거쳐온 layer에 대한 미분값이 축적됨
: 미분 값을 계산한 함수에 대한 정보(backward정보)
import torch
from torch.autograd import Variable
a = torch.ones(2,2)
a = Variable(a, requires_grad=True) #a값이 그래디언트 값이 필요하다, CNN/RNN은 weight값인 그래디언트 값이 자동으로 True로 됨
# a -> b -> c -> out
b = a+2
c = b**2
out = c.sum() #=36
------a.data---------
[[1,1],
[1,1]]
------a.grad---------
None
------a.grad_fn------
None
dout/da = a.grad # 현재는 None 값임, 이 값을 얻기 위해 ->
out.backward() # a.grad값이 채워짐, a.grad_fn은 여전히 None, Why? a값을 얻기 위해 수행된 function이 없으므로 ->
------a.data---------
[[1,1],
[1,1]]
------a.grad---------
[[6,6],
[6,6]]
------a.grad_fn------
None
# b.grad_fn은 <AddBackward0 object at ~>: b=a+2 add 연산에 대한 backward를 했다