그리고 마지막으로 ResNet18에 추가된 완전연결층은 학습을 하도록 설정합니다. 학습을 통해 얻어지는 파라미터를 옵티마이저에 전달해서 최종적으로 모델 학습에 사용합니다.
코드 5-21 파라미터 학습 결과를 옵티마이저에 전달
params_to_update = []
for name, param in resnet18.named_parameters():
if param.requires_grad == True:
params_to_update.append(param) ------ 파라미터 학습 결과를 저장
print("\t", name)
optimizer = optim.Adam(params_to_update) ------ 학습 결과를 옵티마이저에 전달
다음은 완전연결층의 어떤 파라미터들이 옵티마이저로 전달되는지를 보여 줍니다. 다음 결과와 같이 weight와 bias 값들이 업데이트되고 옵티마이저에 전달될 것입니다.
fc.weight fc.bias
이제 모델을 학습시킵니다.
코드 5-22 모델 학습
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
criterion = nn.CrossEntropyLoss() ------ 손실 함수 지정
train_acc_hist, train_loss_hist = train_model(resnet18, train_loader, criterion, optimizer, device)