이수안컴퓨터연구소의 파이토치(PyTorch) 기초 영상을 보고 정리한 내용입니다.
✅ torch.nn & torch.nn.functional
PyTorch는 신경망(Neural Network) 생성, 학습을 위해 torch.nn 또는 torch.nn.functional 패키지를 제공한다.
torch.nn 또는 torch.nn.functional 패키지를 통해 자동미분(autograd) 관련 작업을 진행할 수 있다.
이 두 패키지는 같은 기능을 제공하지만 방식이 조금 다르다.
결론만 말하자면 torch.nn은 attribute를 활용해 state를 저장, 활용하고 torch.nn.functional로 구현한 함수의 경우에는 인스턴스화시킬 필요없이 바로 사용이 가능하다.
✅ torch.nn
torch.nn은 주로 가중치(weights), 편향(bias) 값들이 내부에서 자동으로 생성되는 레이어들을 사용할 때 쓰인다.
값들이 자동으로 생성되기 때문에 weight 값들을 직접 선언하지 않는다.
torch.nn의 예시는 다음과 같다.
- Containers
- Convolution Layers
- Pooling layers
- Padding Layers
- Non-linear Activations (weighted sum, nonlinearity)
- Non-linear Activations (other)
- Normalization Layers
- Recurrent Layers
- Transformer Layers
- Linear Layers
- Dropout Layers
- Sparse Layers
- Distance Functions
- Loss Functions
✔️ Convolution Layers
먼저 Convolution은 이미지 위에 stride 값만큼 kernel을 이동시키면서 겹쳐지는 부분의 각 원소 값을 모두 곱한뒤 더한 값을 출력하는 연산이다.
PyTorch에서는 torch.nn.Conv2d로 위 연산을 제공한다.
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
이를 활용한 예제는 다음과 같다.
import torch
import torch.nn as nn
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
input = torch.randn(20, 16, 50, 100)
output = m(input)
print(output.shape)
# output
# torch.Size([20, 33, 26, 100])
✅ torch.nn.functional
torch.nn.functional은 torch.nn과 달리 가중치(weights)를 직접 선언하여 인자로 넣어주어야 한다.
torch.nn.functional의 예시는 다음과 같다.
- Convolution functions
- Pooling functions
- Non-linear activation functions
- Normalization functions
- Linear functions
- Dropout functions
- Sparse functions
- Distance functions
- Loss functions
✔️ Convolution functions
torch.nn.Conv2d()가 존재하듯이 torch.nn.functional에는 같은 연산으로 torch.nn.functional.conv2d()가 있다.
torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
이를 활용한 예제는 다음과 같다.
import torch
import torch.nn.functional as F
filters = torch.randn(8, 4, 3, 3)
inputs = torch.randn(1, 4, 5, 5)
conv = F.conv2d(inputs, filters, padding=1)
print(conv.shape)
# output
# torch.Size([1, 8, 5, 5])
🔍 참조
torch.nn.Conv2d https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html
torch.nn.functional.conv2d https://pytorch.org/docs/stable/generated/torch.nn.functional.conv2d.html
'Python > PyTorch' 카테고리의 다른 글
[PyTorch] Torchvision과 utils.data (0) | 2022.02.23 |
---|---|
[PyTorch] CUDA와 자동미분 (0) | 2022.02.23 |
[PyTorch] 텐서의 연산과 조작 (0) | 2022.02.22 |
[PyTorch] 파이토치와 텐서 (0) | 2022.02.22 |
댓글