파이토치에서 드롭아웃 구현: 예제 포함
코드 및 인터랙티브 시각화를 완료한 드롭아웃(Dropout)을 사용하여 파이토치 모델을 정규화하는 방법을 다루는 예제
Created on January 11|Last edited on January 21
Comment
PyTorch의 드롭아웃 소개
이번 리포트에서는 PyTorch 모델에 드롭아웃을 추가하는 예를 살펴보고Weights & Biases에서 모델을 추적하여 드롭아웃이 모델의 성능에 미치는 영��을 관찰하고자 합니다.
드롭아웃이란?
드롭아웃은 신경망에서 유닛을 제거(또는 드롭아웃)하여 다수의 아키텍처를 동시에 시뮬레이션하는 머신 러닝 기술입니다. 중요한 것은, 드롭아웃이 트레이닝 중에 과적합(overfitting)될 가능성을 획기적으로 줄일 수 있다는 것입니다.

PyTorch 모델에 드롭아웃 추가 예제
1. PyTorch 모델에 드롭아웃 추가
PyTorch 모델에 드롭아웃을 추가하는 것은 뉴런이 비활성화될 확률인 드롭아웃 비율을 매개 변수로 사용하는torch.nn.Dropout 클래스로 매우 간단하게가능합니다.
self.dropout = nn.Dropout(0.25)
우리는Non-Output Layer이후에 드롭아웃을 적용할 수 있습니다.
2. 드롭아웃이 모델 성능에 미치는 영향 관찰
드롭아웃의 효과를 관찰하려면 이미지를 분류할 수 있도록 모델을 트레이닝합니다. 먼저 정규화되지 않은(unregularized) 네트워크를 교육한 후 드롭아웃을 통해 정규화된 네트워크를 교육할 것입니다. 모델은 각각 15 Epoch 동안 Cifar-10 데이터 세트에 대해 훈련하게 됩니다.
PyTorch 모델에 드롭아웃을 추가하는 전체 예제:
class Net(nn.Module):def __init__(self, input_shape=(3,32,32)):super(Net, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3)self.conv2 = nn.Conv2d(32, 64, 3)self.conv3 = nn.Conv2d(64, 128, 3)self.pool = nn.MaxPool2d(2,2)n_size = self._get_conv_output(input_shape)self.fc1 = nn.Linear(n_size, 512)self.fc2 = nn.Linear(512, 10)# Define proportion or neurons to dropoutself.dropout = nn.Dropout(0.25)def forward(self, x):x = self._forward_features(x)x = x.view(x.size(0), -1)x = self.dropout(x)x = F.relu(self.fc1(x))# Apply dropoutx = self.dropout(x)x = self.fc2(x)return x
def train(model, device, train_loader, optimizer, criterion, epoch, steps_per_epoch=20):# Log gradients and model parameterswandb.watch(model)# loop over the data iterator, and feed the inputs to the network and adjust the weights.for batch_idx, (data, target) in enumerate(train_loader, start=0):# ...acc = round((train_correct / train_total) * 100, 2)# Log metrics to visualize performancewandb.log({'Train Loss': train_loss/train_total, 'Train Accuracy': acc})
PyTorch에서 드롭아웃 사용이 미치는 영향
- 정규화되지 않은(unregularized) 네트워크는 트레이닝 데이터 세트에 빠르게 적응합니다. 드롭아웃 없이 without-dropout 실행되는 검증 손실은 몇 시대(Epoch)가 지나면 크게 달라집니다. 이것은 더 높은 일반화 오류를 설명합니다.
- 드롭아웃 확률이 25%인 두 드롭아웃 레이어로 트레이닝할 경우 모델이 과적합되는 것을 방지할 수 있습니다. 그러나, 이것은 트레이닝의 정확성을 떨어뜨리고, 이것은 정규화된 네트워크가 더 오래 트레이닝되어야 한다는 것을 의미합니다.
- 드롭아웃은 모델 일반화를 향상시킵니다. 정규화되지 않은 네트워크보다 교육 정확도가 낮더라도 전반적인 검증 정확도는 향상되었습니다. 이는 낮은 일반화 오류를 설명합니다.
이것으로 PyTorch 모델에서 드롭아웃을 사용하는 방법에 대한 짧은 튜토리얼을 마치겠습니다.
Weights & Biases
는 기계 학습 실험을 추적하는 데 도움이 됩니다. 저희 툴을 사용하여 실행에서 하이퍼 파라미터 및 출력 메트릭을 기록한 다음 결과를 시각화 및 비교하고 결과를 동료와 신속하게 공유할 수 있습니다.
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.