▪︎ 자동미분
- Pytorch는 Tensor의 모든 연산에 대해 자동미분이 가능
- 자동미분은 역전파에 활용
requires_grad : Tensor의 속성으로, True로 설정해야 자동미분이 가능
tensor.backward() : 미분 실행
tensor.grad : 미분값을 확인할 수 있는 속성
x = torch.tensor([1.], requires_grad=True)
y = x ** 2
print(y)
print(x.grad)
# tensor([1.], grad_fn=<PowBackward0>)
# None
z = 3 * y
print(z)
# tensor([3.], grad_fn=<MulBackward0>)
z.backward()
print(x.grad)
# tensor([6.])
x = torch.tensor([1.], requires_grad=True)
a = x ** 2
b = a + 1
c = b ** 2
c.backward()
print(x.grad)
# tensor([8.])
result = x.grad.detach()
print(result)
print(result.requires_grad)
print(result.item())
# tensor([8.])
# False
# 8.0
x = torch.tensor([1.], requires_grad=True)
y = torch.tensor([3.], requires_grad=True)
z = (2 * (x ** 2)) + (y ** 2)
print(z)
# tensor([11.], grad_fn=<AddBackward0>)
z.backward()
print(x.grad)
print(y.grad)
# tensor([4.])
# tensor([6.])
with torch.no_grad()
- grad_fn 을 계산하고 싶지 않을때 사용
- 모델 훈련 후 test data를 가지고 평가할 때 사용
x = torch.tensor([1.], requires_grad=True)
with torch.no_grad():
y = x ** 2
print(x.requires_grad)
print(y)
# True
# tensor([1.])
print(x.requires_grad)
# True
y.backward() # with 구문 안쪽의 y로 미분 시도시 에러 발생
▪︎ 선형회귀모델
▫︎ 단일선형회귀
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import numpy as np