데이터셋과 모델의 네트워크가 준비되었기 때문에 이제 모델을 학습시킵니다.
코드 9-35 모델 학습
for epoch in range(epochs):
iteration_loss = 0. ------ 변수를 0으로 초기화
iteration_accuracy = 0.
model.train() ------ 모델 학습
for i, data in enumerate(train_loader): ------ 데이터로더에서 훈련 데이터셋을 배치 크기만큼 불러옵니다.
X, y = data
y_pred = model(X.float()) ------ 독립 변수를 모델에 적용하여 훈련
loss = BCE(y_pred, y.reshape(-1,1).float()) ------ 모델에 적용하여 훈련시킨 결과와 정답(레이블)을 손실 함수에 적용
iteration_loss += loss ------ 오차 값을 변수에 누적하여 저장
iteration_accuracy += accuracy(y_pred, y) ------ 모델 성능(정확도)을 변수에 누적하여 저장
optimizer.zero_grad()
loss.backward()
optimizer.step()
if(epoch % print_epoch == 0):
print('Train: epoch: {0} - loss: {1:.5f}; acc: {2:.3f}'.format(epoch, iteration_loss/(i+1), iteration_accuracy/(i+1)))
iteration_loss = 0.
iteration_accuracy = 0.
model.eval() ------ 모델 검증(테스트)
for i, data in enumerate(test_loader): ------ 데이터로더에서 테스트 데이터셋을 배치 크기만큼 불러옵니다.
X, y = data
y_pred = model(X.float())
loss = BCE(y_pred, y.reshape(-1,1).float())
iteration_loss += loss
iteration_accuracy += accuracy(y_pred, y)
if(epoch % print_epoch == 0):
print('Test: epoch: {0} - loss: {1:.5f}; acc: {2:.3f}'.format(epoch,
iteration_loss/(i+1), iteration_accuracy/(i+1)))