웹 개발 메모장
5. 신경망 정의와 순방향 전파 본문
신경망 정의와 순방향 전파(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
'옛날.. > pytorch' 카테고리의 다른 글
7. nn.Sequential을 사용한 신경망 구현 (2) | 2019.07.22 |
---|---|
6. 신경망 학습과 평가 (0) | 2019.07.22 |
4. Pytorch torchvision에서 데이터셋 가져오기 (0) | 2019.07.21 |
3. Pytorch nn과 nn.functional (1) | 2019.07.21 |
2. Pytorch autograd와 Variable (0) | 2019.07.21 |
Comments