Torch_tutorials
๊ฐ์ธ study๋ฅผ ์ํ ์๋ฃ์ ๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ๋ด์ฉ์ ์๋ชป๋ ์ ์ด ์์ต๋๋ค.
PyTorch tutorial ์ ํ๋ฉด์, ์ดํดํ ๋ด์ฉ์ ์ ๋ฆฌ๋ฅผ ํ์์ต๋๋ค.
Summary
torch.tensor
- โN์ฐจ์ ๋ฐฐ์ด dataโ + โGPUโ + โgradientโN์ฐจ์ ๋ฐฐ์ด data๋ฅผ ์ ์ฅํ๋ ๋ฉด์์,
numpy.ndarray
์ ๋น์ทํฉ๋๋ค.CPU/GPU device ์ด๋์ ์ง์ํฉ๋๋ค.
to(device)
autograd
๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด, back propagation์ ์์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
torch.nn
- Neural Networks์ ์ ์ํฉ๋๋ค.Module
: Layer์forward
method๋ฅผ ํฌํจํ๋ฉฐ, ์ฃผ๋ก model๋ฅผ ์๋ก ์ ์ํ ๋, parent class ๋ก ์ฌ์ฉํฉ๋๋ค.Parameter
: Tensor์ subclass(wrapper)๋ก,Module
์์ ํ์ต์ ์ํ weight ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.parameters()
iterator ๋ก ๋ถ๋ฌ ์ฌ ์ ์์ต๋๋ค.functional
: ํ์ฑํ ํจ์, ์์ค ํจ์ ๋ฑ์ ํฌํจํ๋ ๋ชจ๋๋ก ์ผ๋ฐ์ ์ผ๋กF
importํฉ๋๋ค. ๋ํ convolution๊ณผ linear layer์ ๊ฐ์ด, ์ ์ฅ state๋ฅผ ๊ฐ์ง๋ layer์ non-statefule ๋ฒ์ ๋ ์ด์ด๋ ํฌํจ๋์ด ์์ต๋๋ค.
torch.optim
-backward()
๋จ๊ณ์์,Parameter
๋ฅผ updateํ๋ optimizer๋ฅผ ํฌํจํ๋ moduleDataset
- dataset์ ํํํ๊ธฐ ์ํด ์ ๊ณต๋๋__len__
๊ณผ__getitem__
์ ํฌํจํ๋ abstract class.DataLoader
-Dataset
์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ์ ๋ฐฐ์น๋ฅผ ์ถ๋ ฅํ๋ iterator.
1. torch.Tensor
numpy.ndarray
์ ๋น์ทํ๊ฒ ๋ค์ฐจ์ ์ฐ์ฐ์ ์ํ ๊ธฐ๋ณธ function๋ค์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , PyTorch๋ tensor
์ autograd
๋ฅผ ๋ฃ์ด ๊ฐ์ฅ ์ค์ฌ์ด๋๋ class๋ก ์ฌ์ฉํฉ๋๋ค.
์ด์ ์๋
torch.autograd.Variable
์ด๋ผ๋ tensor์ wrapper class๊ฐ ์์ด, ์ฌ๊ธฐ์ operation hisotry๋ฅผ ์ ์ฅํ์ต๋๋ค. ํ์ง๋ง,autograd
๊ฐtensor
์์ ์๋ ์ง์๋๋ฉด์, ๋ ์ด์ ์ง์ํ์ง ์์ต๋๋ค.)
torch.Tensor is the central class of the package.
tensor.requires_grad
๋ฅผ True
๋ก ํ๋ฉด, tensor
๋ฅผ ์ฌ์ฉํ ์ฐ์ฐ๊ณผ์ ์ ๊ธฐ๋ก(grad_fn
)ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ต์ข
๋จ tensor
์์ .backward()
๊ฐ ์ํ๋๋ฉด, gradient๊ฐ ๊ณ์ฐ๋์ด tensor.grad
์ ์ ์ฅ๋๊ณ , ์ด ๊ฐ์, grad_fn
์ ๊ธฐ๋ก๋ ์ฐ์ฐ์ ํ๊ณ , back propagation ์ด ์งํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ด code๋ฅผ ์์ฑํ ๊ฒฝ์ฐ [2],
2. torch.nn & torch.optim & Dataset & DataLoader
์ด ๋ถ๋ถ์ ์ค์ ์์ ๋ฅผ ํตํด์ ์ดํดํ๋๊ฒ ์ข์ต๋๋ค.[3]
torch.nn
, torch.optim
, Dataset
๊ทธ๋ฆฌ๊ณ DataLoader
์์ด Tensor๋ง์ ์ด์ฉํด์, ์๋์ ๊ฐ์ด Linear regression์ model์ ๊ตฌํํ๊ณ ํ์ตํ ์ ์์ต๋๋ค.
1) nn.functional ์ฌ์ฉ
์ฌ๊ธฐ์, torch.nn.functional
๋ฅผ ์ฌ์ฉํด์, log_softmax()
+ negative_log_likelihood()
๋ฅผ ํ๋์ ํจ์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
2) nn.Module ์ฌ์ฉ
ํ์ต์ ๋์์ด ๋๋ parameter์ Neural Networks model์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํ์ฌ, nn.Module
์ ์ฌ์ฉํฉ๋๋ค. nn.Module
์ Parameters()
๋ฅผ ์ด์ฉํด์, model์ ์ํด ์๋ parameter์ ๋ํด์ ์๋์ ๊ฐ์ด ์ฝ๊ฒ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค.
3) nn.Linear ์ฌ์ฉ
๋ฏธ๋ฆฌ ์ ์๋ Model๋ค ์ ์ฌ์ฉํด์, code๋ฅผ ๋ฆฌํฉํ ๋ง ํ ์ ์์ต๋๋ค. nn.Linear
๋ฅผ ์ฌ์ฉํด์, self.weights
์ self.bias
์ ์ ์์ ์ด๊ธฐํ ์์
๊ทธ๋ฆฌ๊ณ xb @ self.weights + self.bias
๊ณ์ฐ์ ๋์ ํ ์ ์์ต๋๋ค.
4) optim ์ฌ์ฉ
๋ฏธ๋ฆฌ ๊ตฌํ๋, optimization ์๊ณ ๋ฆฌ์ฆ์ torch.optim
์ ์ด์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด, parameters๋ฅผ step()
method๋ฅผ ์ฌ์ฉํ updateํ ์ ์์ต๋๋ค.
5) Dataset & DataLoader ์ฌ์ฉ
๊ตฌํ์ ํ๋ค๋ณด๋ฉด, data๋ฅผ loadํ๊ณ ์๋ฅด๊ณ ์๋๋ฐ ๋ง์ code๊ฐ ๋ค์ด ๊ฐ๋๋ค. ์ด๋, Dataset๊ณผ DataLoader๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ถ๋ถ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. __len__
๊ณผ __getitem__
๋ฅผ ๊ฐ์ง class๋ Dataset
์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก __len__
๊ณผ __getitem__
๋ง ๋ง๋ค๋ฉด, customize๋ Dataset
์ ์ ์ํ ์ ์์ต๋๋ค. Tensor๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ๋ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ์ ์๋ TensorDataset
๋ฅผ ์ฌ์ฉํ ์ ์๋ค. DataLoader
๋ batch ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. Dataset
๊ณผ DataLoader
๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด ์ง๋๋ค.
6) ์ต์ข
code
torch.nn
& torch.optim
& Dataset
& DataLoader
๋ฅผ ์ฌ์ฉํ์ฌ, ์๋์ ๊ฐ์ด code๋ฅผ refactoring ํ ์ ์์ต๋๋ค.
Reference
Last updated