다음은 훈련 데이터셋을 이용하여 모델을 학습시키기 위한 함수입니다.
코드 7-25 모델 학습 함수
def train(model, optimizer, train_iter):
model.train()
for b, batch in enumerate(train_iter):
x, y = batch.text.to(device), batch.label.to(device)
y.data.sub_(1) ------ ①
optimizer.zero_grad()
logit = model(x)
loss = F.cross_entropy(logit, y)
loss.backward()
optimizer.step()
if b % 50 == 0: ------ 훈련 데이터셋의 개수를 50으로 나누어서 나머지가 0이면 출력
print("Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}".format(e,b *
len(x),len(train_iter.dataset),loss.item()))
① sub_()는 뺄셈에 대한 함수이며, 함수명에 ‘_’이 붙은 것은 inplace 연산을 하겠다는 의미입니다. 그리고 앞에서 IMDB의 레이블의 경우 긍정은 2, 부정은 1의 값을 갖는다고 했습니다. 따라서 y.data에서 1을 뺀다는 것은 레이블 값을 0과 1로 변환하겠다는 의미입니다.