모델에서 사용할 손실 함수와 옵티마이저를 지정합니다.
코드 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) )