이제 모델을 훈련 데이터셋에서 훈련할 수 있습니다. 코드 2-12에서 2-14까지 model.fit() 메서드의 다양한 기능을 사용합니다. 하지만 기본적으로 그림 2-6과 동일한 작업을 수행합니다. 각 단계에서 새로운 샘플 특성(tensors.trainFeatures)과 타깃(tensors.trainTarget)을 여러 개 선택하고, 손실을 계산하고, 이 손실을 줄이기 위해 가중치를 업데이트합니다. 이 과정은 전체 훈련 데이터에 대해 NUM_EPOCHS 동안 반복되며 에포크 안의 각 단계마다 BATCH_SIZE개의 샘플을 선택합니다.
코드 2-12 보스턴 주택 데이터에서 모델 훈련하기
await model.fit(tensors.trainFeatures, tensors.trainTarget, {
batchSize: BATCH_SIZE
epochs: NUM_EPOCHS,
});
보스턴 주택 웹 애플리케이션에서 모델이 훈련될 때 훈련 손실의 그래프를 그리겠습니다. 이를 위해 model.fit()의 콜백(callback) 기능을 사용해 UI를 업데이트합니다. model.fit() 콜백 API를 사용하면 특정 이벤트에 실행시킬 콜백 함수를 제공할 수 있습니다. 3.8.0 버전의 전체 콜백 트리거(trigger)는 onTrainBegin, onTrainEnd, onEpochBegin, onEpochEnd, onBatchBegin, onBatchEnd, onYield입니다.
코드 2-13 model.fit()의 콜백
let trainLogs = [];
await model.fit(tensors.trainFeatures, tensors.trainTarget, {
batchSize: BATCH_SIZE,
epochs: NUM_EPOCHS,
callbacks: {
onEpochEnd: async (epoch, logs) => {
await ui.updateModelStatus(
'에포크 ${NUM_EPOCHS}번 중 ${epoch + 1}번째 완료.', modelName);
trainLogs.push(logs);
tfvis.show.history(container, trainLogs, ['loss'],
{'xLabel':'반복(에포크)','yLabel':'손실'})
}
}
});