눈으로만 봐서는 도저히 머리에 안들어와서 블로그에 쓰면서 정리함
pytorch.org/docs/stable/nn.html
torch.nn.Linear
- 함수 선언시 두개의 인자값이 들어가게되고, 첫번째 인자값은 input size, 두번째 인자값은 output size이다
- 실제로 데이터가 거치는 forward()부분에선 두번째 인자값없이 첫번째 인자값만 넘겨주면된다. return되는 tensor의 크기가 output size가 된다
# Linear layer 선언
linear_1 = torch.nn.Linear(input_size, output_size)
# forward 부분 (실제로 데이터가 거치는 부분)
# 넣어주는 인자값은 input만, return은 output_size로 반환됨
linear1 = linear_1(input_size)
torch.nn.ReLU, torch.nn.Sigmoid
- 함수 선언시 넘겨주는 인자값은 없음
- 실제로 데이터가 거치는 부분은 첫번째 인자값만 넘겨주면됨
# 선언부분
relu = torch.nn.ReLU()
sigmoid = torch.nn.Sigmoid()
# forward부분
rele_1 = relu(linear1)
sigmoid_1 = sigmoid(linear2)
참고로 ReLU나 Sigmoid함수는 torch.nn.functional꺼를 써도 같음
import torch.nn.functional as F
fc1 = nn.Linear(input_size, output_size)
x = F.relu(fc1(x))
torch.nn.Dropout & torch.nn.functional.dropout
드롭아웃 적용시 사용하는 함수.
training이란 변수는 model.train() 또는 model.eval() 함수를 호출하여 모드를 바꿀때마다, self.training이 True 또는 False로 바뀜
import torch.nn.functional as F
# x 는 Linear에서 출력되는 return 값
x = F.dropout(x, training=self.training, p = 0.2)
torch.nn.Conv2d
CNN을 구현할때 쓰는 convolution 함수
첫번째 인자값은 input의 채널수 - 흑백이미지일 경우 채널수는 1개, RGB이미지일 경우 채널수는 3개
두번째 인자값은 출력되는 채널수
kernel_size는 한자리 수일때는 정사각형으로 인식함 - 예를들어서 kernel_size = 5라고 했을때 커널사이즈는 (5,5)로 됨, 만약에 직사각형으로 넣고싶다면 (3,5) 배열을 입력하면됨
stride - 말그대로 stride의 정의, 이미지 훑어보는 간격정의
padding, bias등등 여러가지 파라미터값을 넣을수있다
2d - two dimension
# Conv2d 함수선언
conv1 = torch.nn.Conv2d(1, 10, kernel_size=5, stride = 1)
# forward부분
x = conv1(x)
torch.nn.MaxPool2d
보통 컨볼루션 레이어를 지나고나서 풀링작업을 진행할때 쓰는 함수. ReLU랑 비슷하게 쓰면된다
두개의 인자값이 들어가게되는데. 첫번째는 input에 대한 데이터, 두번째는 풀링윈도우의 사이즈 정의다.
이것도 마찬가지로 torch.nn.functional에 들어있는 max_pool2d함수를 써도된다
conv1 = torch.nn.Conv2d(1, 10, kernel_size = 3)
# 방법1
x = torch.nn.MaxPool2d(conv1(x), 2)
# 방법2
x = torch.nn.functional.max_pool2d(conv1(x), 2)
torch.nn.Dropout2d & torch.nn.functional.dropout2d
Linear에서 사용하던 dropout과 동일하다.
보통은 컨볼루션 - 풀링 - 컨볼루션 - 드롭아웃 - 풀링 같은 순서로사용한다. dropout과 동일한 인자값을 갖고있다.
torch.nn.functional.dropout2d(input, p=0.5, training=True, inplace=False)
'Data > Data Science' 카테고리의 다른 글
[ML] bf16, fp16, fp32의 차이점 (1) | 2023.05.13 |
---|---|
[EECS 498-007, Lecture5] Activation Function이 필요한 이유 (0) | 2021.05.20 |
[ML] Clustering 정리 및 DBSCAN (0) | 2021.04.22 |
[ML] 짜투리정리 (0) | 2021.02.14 |
[머신러닝] LGBM, XGBoost, GBM (2) | 2021.02.03 |