파이토치에서 드롭아웃 구현: 예제 포함
코드 및 인터랙티브 시각화를 완료한 드롭아웃(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})
Run set
2
PyTorch에서 드롭아웃 사용이 미치는 영향
- 정규화되지 않은(unregularized) 네트워크는 트레이닝 데이터 세트에 빠르게 적응합니다. 드롭아웃 없이 without-dropout 실행되는 검증 손실은 몇 시대(Epoch)가 지나면 크게 달라집니다. 이것은 더 높은 일반화 오류를 설명합니다.
- 드롭아웃 확률이 25%인 두 드롭아웃 레이어로 트레이닝할 경우 모델이 과적합되는 것을 방지할 수 있습니다. 그러나, 이것은 트레이닝의 정확성을 떨어뜨리고, 이것은 정규화된 네트워크가 더 오래 트레이닝되어야 한다는 것을 의미합니다.
- 드롭아웃은 모델 일반화를 향상시킵니다. 정규화되지 않은 네트워크보다 교육 정확도가 낮더라도 전반적인 검증 정확도는 향상되었습니다. 이는 낮은 일반화 오류를 설명합니다.
이것으로 PyTorch 모델에서 드롭아웃을 사용하는 방법에 대한 짧은 튜토리얼을 마치겠습니다.
Weights & Biases
는 기계 학습 실험을 추적하는 데 도움이 됩니다. 저희 툴을 사용하여 실행에서 하이퍼 파라미터 및 출력 메트릭을 기록한 다음 결과를 시각화 및 비교하고 결과를 동료와 신속하게 공유할 수 있습니다.
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.