옵티마이저 및 손실 함수 등 모델에서 사용하는 파라미터를 지정합니다. 모델의 오차를 계산하는 부분과 합쳐서 모델을 정의할 수도 있지만 여기에서는 가독성을 위해 분리했습니다.
코드 10-33 모델 훈련 함수 정의
def trainModel(model, input_lang, output_lang, pairs, num_iteration=20000):
model.train()
optimizer = optim.SGD(model.parameters(), lr=0.01) ------ 옵티마이저로 SGD를 사용
criterion = nn.NLLLoss() ------ ①
total_loss_iterations = 0
training_pairs = [tensorsFromPair(input_lang, output_lang, random.choice(pairs)) for i in range(num_iteration)]
for iter in range(1, num_iteration+1):
training_pair = training_pairs[iter - 1]
input_tensor = training_pair[0]
target_tensor = training_pair[1]
loss = Model(model, input_tensor, target_tensor, optimizer, criterion) ------ Model 객체를 이용하여 오차 계산
total_loss_iterations += loss
if iter % 5000 == 0: ------ 5000번째마다 오차 값에 대해 출력
average_loss= total_loss_iterations / 5000
total_loss_iterations = 0
print('%d %.4f' % (iter, average_loss))
torch.save(model.state_dict(), '../chap10/data/mytraining.pt')
return model