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์forwardmethod๋ฅผ ํฌํจํ๋ฉฐ, ์ฃผ๋ก model๋ฅผ ์๋ก ์ ์ํ ๋, parent class ๋ก ์ฌ์ฉํฉ๋๋ค.Parameter: Tensor์ subclass(wrapper)๋ก,Module์์ ํ์ต์ ์ํ weight ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.parameters()iterator ๋ก ๋ถ๋ฌ ์ฌ ์ ์์ต๋๋ค.functional: ํ์ฑํ ํจ์, ์์ค ํจ์ ๋ฑ์ ํฌํจํ๋ ๋ชจ๋๋ก ์ผ๋ฐ์ ์ผ๋กFimportํฉ๋๋ค. ๋ํ 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],
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ NN์ด ์์ฑ์ด ๋๋ฉฐ, z์ y๋ gard_fn์, ํด๋น tensor๊ฐ ๊ณ์ฐ ๋๋ ๊ณผ์ ์ด ์ ์ฅ๋ฉ๋๋ค. z.backward()๊ฐ ์ํ์ด๋๋ฉด, z.grand_fn์์ ์ฃผ์ด์ง ๊ฐ๋ค์ด back propagation ๋๋ฉด์, x.grad, a.grad, b.grad๊ฐ ์๋ ๊ณ์ฐ๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด์, tensor ๋ง์ผ๋ก๋ model ์์ฑ๊ณผ ํ์ต์ด ๊ฐ๋ฅํฉ๋๋ค. 
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
Was this helpful?