Skip to main content

파이토치에서 드롭아웃 구현: 예제 포함

코드 및 인터랙티브 시각화를 완료한 드롭아웃(Dropout)을 사용하여 파이토치 모델을 정규화하는 방법을 다루는 예제
Created on January 11|Last edited on January 21
이는 여기에서 볼 수 있는 영어 기사를 번역한 것이다.

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 dropout
self.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 dropout
x = self.dropout(x)
x = self.fc2(x)
return x
교육 기능에서 wandb.log()를 사용하면 모델의 성능을 자동으로 추적할 수 있습니다. 자세한 내용은 문서를 참조하십시오.
def train(model, device, train_loader, optimizer, criterion, epoch, steps_per_epoch=20):

# Log gradients and model parameters
wandb.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 performance
wandb.log({'Train Loss': train_loss/train_total, 'Train Accuracy': acc})



Run set
2


PyTorch에서 드롭아웃 사용이 미치는 영향

  • 정규화되지 않은(unregularized) 네트워크는 트레이닝 데이터 세트에 빠르게 적응합니다. 드롭아웃 없이 without-dropout 실행되는 검증 손실은 몇 시대(Epoch)가 지나면 크게 달라집니다. 이것은 더 높은 일반화 오류를 설명합니다.
  • 드롭아웃 확률이 25%인 두 드롭아웃 레이어로 트레이닝할 경우 모델이 과적합되는 것을 방지할 수 있습니다. 그러나, 이것은 트레이닝의 정확성을 떨어뜨리고, 이것은 정규화된 네트워크가 더 오래 트레이닝되어야 한다는 것을 의미합니다.
  • 드롭아웃은 모델 일반화를 향상시킵니다. 정규화되지 않은 네트워크보다 교육 정확도가 낮더라도 전반적인 검증 정확도는 향상되었습니다. 이는 낮은 일반화 오류를 설명합니다.
이것으로 PyTorch 모델에서 드롭아웃을 사용하는 방법에 대한 짧은 튜토리얼을 마치겠습니다.

Weights & Biases

는 기계 학습 실험을 추적하는 데 도움이 됩니다. 저희 툴을 사용하여 실행에서 하이퍼 파라미터 및 출력 메트릭을 기록한 다음 결과를 시각화 및 비교하고 결과를 동료와 신속하게 공유할 수 있습니다.
5분 내로 시작하세요.

Iterate on AI agents and models faster. Try Weights & Biases today.