코드 13-9 이미지 시각화
def plot_ae_outputs(encoder, decoder, n=5, noise_factor=0.3):
plt.figure(figsize=(10,4.5))
for i in range(n):
ax = plt.subplot(3, n, i+1) ------ subplot에서 사용하는 파라미터는 (행, 열, 인덱스)입니다. 3×5 형태의 이미지가 출력됩니다.
img = test_dataset[i][0].unsqueeze(0)
image_noisy = add_noise(img, noise_factor)
image_noisy = image_noisy.to(device)
encoder.eval() ------ 인코더 평가
decoder.eval() ------ 디코더 평가
with torch.no_grad():
rec_img = decoder(encoder(image_noisy))
plt.imshow(img.cpu().squeeze().numpy(), cmap='gist_gray') ------ 테스트 데이터셋을 출력
ax.get_xaxis().set_visible(False)------ set_visible(False)는 그래프의 눈금을 표시하지 않겠다는 의미
ax.get_yaxis().set_visible(False)
if i == n//2:
ax.set_title('원래 이미지')
ax = plt.subplot(3, n, i + 1 + n)
plt.imshow(image_noisy.cpu().squeeze().numpy(), cmap='gist_gray') ------ 테스트 데이터셋에 노이즈가 적용된 결과를 출력
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
if i == n//2:
ax.set_title('노이즈가 적용되어 손상된 이미지')
ax = plt.subplot(3, n, i + 1 + n + n)
plt.imshow(rec_img.cpu().squeeze().numpy(), cmap='gist_gray') ------ 노이즈가 추가된 이미지를 인코더와 디코더에 적용한 결과를 출력
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
if i == n//2:
ax.set_title('재구성된 이미지')
plt.subplots_adjust(left=0.1,
bottom=0.1,
right=0.7,
top=0.9,
wspace=0.3,
hspace=0.3) ------ subplots_adjust()를 이용하여 subplot들이 겹치지 않도록 최소한의 여백을 만들어 줍니다.
plt.show()