더북(TheBook)

모델에서 사용할 손실 함수와 옵티마이저를 지정합니다.

코드 9-33 손실 함수와 옵티마이저 지정

epochs = 1000+1
print_epoch = 100
LEARNING_RATE = 1e-2

model = binaryClassification()
model.to(device)
print(model)
BCE = nn.BCEWithLogitsLoss() ------ ①
optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_RATE) ------ 훈련 데이터셋에서 무작위로 샘플을 추출하고 그 샘플만 이용해서 기울기를 계산

① 이진 분류(예제처럼 당뇨병인지 아닌지를 판별/예측하는 문제)에서 사용하는 손실 함수로는 이진 교차 엔트로피(Binary Cross Entropy Loss, BCELoss)BCEWithLogitsLoss 함수가 있습니다.

BCELoss 손실 함수에 시그모이드(sigmoid) 함수가 함께 결합된 것이 BCEWithLogitsLoss 손실 함수입니다. 따라서 다음과 같이 표현할 수 있습니다.

torch.nn.BCEWithLogitsLoss = torch.nn.BCELoss + torch.sigmoid

다음은 앞에서 생성한 모델의 네트워크를 보여 줍니다.

binaryClassification(
  (layer_1): Linear(in_features=8, out_features=64, bias=True)
  (layer_2): Linear(in_features=64, out_features=64, bias=True)
  (layer_out): Linear(in_features=64, out_features=1, bias=True)
  (relu): ReLU()
  (dropout): Dropout(p=0.1, inplace=False)
  (batchnorm1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (batchnorm2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.