모델 학습에 대한 함수를 생성합니다.
코드 13-5 모델 학습 함수 생성
def train_epoch(encoder, decoder, device, dataloader, loss_fn, optimizer, noise_factor=0.3):
encoder.train() ------ 인코더 훈련
decoder.train() ------ 디코더 훈련
train_loss = []
for image_batch, _ in dataloader: ------ 훈련 데이터셋을 이용하여 모델 학습(비지도 학습으로 레이블은 필요하지 않습니다)
image_noisy = add_noise(image_batch, noise_factor)
image_noisy = image_noisy.to(device) ------ 데이터셋이 CPU/GPU 장치를 사용하도록 지정
encoded_data = encoder(image_noisy) ------ 노이즈 데이터를 인코더의 입력으로 사용
decoded_data = decoder(encoded_data) ------ 인코더 출력을 디코더의 입력으로 사용
loss = loss_fn(decoded_data, image_noisy)
optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss.append(loss.detach().cpu().numpy())
return np.mean(train_loss)