웹 개발 메모장

5. 신경망 정의와 순방향 전파 본문

옛날../pytorch

5. 신경망 정의와 순방향 전파

도로롱주 2019. 7. 22. 00:03

 

신경망 정의와 순방향 전파(Neural Network and Forward propagation)

Neural Network 정의

신경망은 아래 그림과 같이
input layer, hidden layer, output layer 를 갖습니다.

 

신경망 모델을 pytorch를 사용해 class로 구현하기

pytorch의 nn.module을 상속받아 low level의 코딩을 줄일 수 있습니다.

import torch
import torch.nn as nn


class MyNeuralNetwork(nn.Module):
    def __init__(self):
        pass # 모델 코딩

    def forward(self, x):
        pass # 순전파 코딩

CIFAR10 데이터셋

CIFAR10 데이터셋을 학습하는 신경망 모델을 만들려고 합니다.
CIFAR10 데이터셋은 32 * 32 크기의 RGB 데이터입니다.
이 데이터셋을 torchvision을 통해 다음과 같이 데이터를 로드하려고 합니다.

train_set = torchvision.datasets.CIFAR10(
    root='./data',
    train=True,
    download=False,
    transform=transform
)

test_set = torchvision.datasets.CIFAR10(
    root='./data',
    train=False,
    download=False,
    transform=transform
)
train_loader = DataLoader(train_set, batch_size=8, shuffle=True, num_workers=0)
test_loader = DataLoader(test_set, batch_size=8, shuffle=False, num_workers=0)

이렇게 로드한 데이터의 형태를 살펴보면

# print shapes of loaded data
for n, (img, labels) in enumerate(test_loader):
    print(n, img.shape, labels.shape)
torch.Size([8, 3, 32, 32]) torch.Size([8])

batch_size 8 로 가져온 이미지가 채널이 3이고, 크기가 32 * 32 인 이미지라는 것을 알 수 있습니다.

모델과 순전파 코딩

  • nn.Conv2d를 사용한 모델입니다.
  • nn.Conv2d에 대한 내용은 앞에 있으니 넘어가겠습니다.(https://github.com/djkim1991/pytorchStudy/issues/3)
  • forward 함수는 입력 데이터가 어떤 결과를 return 하는 지 작성하면 됩니다.
  • 여기서는 입력 데이터 x가 Conv2d 함수를 두번 통과한 결과를 return 합니다.
import torch
import torch.nn as nn


class MyNeuralNetwork(nn.Module):
    def __init__(self):
        super(MyNeuralNetwork, self).__init__()
        self.net_1 = nn.Conv2d(3, 5, 5)
        self.net_2 = nn.Conv2d(5, 10, 5)

    def forward(self, x):
        x = self.net_1(x)
        x = self.net_2(x)

        return x

참고: 김군이(https://www.youtube.com/watch?v=KXiDzNai9tI)

Comments