코드를 실행하면 다음과 같이 모델 훈련 결과가 출력됩니다.
Iteration: 500, Loss: 0.5627565979957581, Accuracy: 82.70999908447266% Iteration: 1000, Loss: 0.4662465751171112, Accuracy: 84.4000015258789% Iteration: 1500, Loss: 0.33023178577423096, Accuracy: 84.41000366210938% Iteration: 2000, Loss: 0.3131774067878723, Accuracy: 85.05999755859375% Iteration: 2500, Loss: 0.28404906392097473, Accuracy: 86.26000213623047% Iteration: 3000, Loss: 0.31252551078796387, Accuracy: 86.4800033569336%
최종적으로 정확도가 86%로 높은 수치를 보여 줍니다. 심층 신경망에 대한 모델 생성과 성능을 평가해 보았다면, 이제 합성곱 신경망을 생성해 보겠습니다.
코드 5-9 합성곱 네트워크 생성
class FashionCNN(nn.Module):
def __init__(self):
super(FashionCNN, self).__init__()
self.layer1 = nn.Sequential( ------ ①
nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1), ------ ②
nn.BatchNorm2d(32), ------ ③
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2) ------ ④
)
self.layer2 = nn.Sequential(
nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.MaxPool2d(2)
)
self.fc1 = nn.Linear(in_features=64*6*6, out_features=600) ------ ⑤
self.drop = nn.Dropout2d(0.25)
self.fc2 = nn.Linear(in_features=600, out_features=120)
self.fc3 = nn.Linear(in_features=120, out_features=10) ------ 마지막 계층의 out_features는 클래스 개수를 의미
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
out = out.view(out.size(0), -1) ------ ⑥
out = self.fc1(out)
out = self.drop(out)
out = self.fc2(out)
out = self.fc3(out)
return out