더북(TheBook)

다음은 훈련 데이터셋을 이용하여 모델을 학습시키기 위한 함수입니다.

코드 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로 변환하겠다는 의미입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.