본문 바로가기

Data/Data Science

[Pytorch] torch.nn layer 함수 정리 (추가정리중)

반응형

눈으로만 봐서는 도저히 머리에 안들어와서 블로그에 쓰면서 정리함

pytorch.org/docs/stable/nn.html

 

torch.nn — PyTorch 1.8.1 documentation

Shortcuts

pytorch.org

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)

반응형