이제 모델을 검증(테스트)하기 위한 함수를 생성합니다.
코드 13-6 모델 테스트 함수 생성
def test_epoch(encoder, decoder, device, dataloader, loss_fn, noise_factor=0.3):
# Set evaluation mode for encoder and decoder
encoder.eval() ------ 인코더 테스트
decoder.eval() ------ 디코더 테스트
with torch.no_grad():
conc_out = [] ------ 각 배치에 대한 출력을 저장하기 위해 리스트 형식의 변수 정의
conc_label = []
for image_batch, _ in dataloader:
image_batch = image_batch.to(device)
encoded_data = encoder(image_batch)
decoded_data = decoder(encoded_data)
conc_out.append(decoded_data.cpu())
conc_label.append(image_batch.cpu())
conc_out = torch.cat(conc_out) ------ 리스트 형식으로 저장된 모든 값을 하나의 텐서로 생성
conc_label = torch.cat(conc_label)
val_loss = loss_fn(conc_out, conc_label) ------ 손실 함수를 이용하여 오차 계산
return val_loss.data
입력 데이터셋에 추가할 노이즈를 생성하기 위한 함수를 정의합니다.
코드 13-7 노이즈 데이터 생성
def add_noise(inputs, noise_factor=0.3):
noisy = inputs + torch.randn_like(inputs) * noise_factor ------ ①
noisy = torch.clip(noisy, 0., 1.) ------ ②
return noisy