보통 MNIST를 활용해서 여러 가지 모형의 Simple 테스트를 하는 일이 많은데 이때, 원본과 결과물을 비교해서 그려볼 수 있는 matplotlib 코드인데요, 특히 이미지 처리 후에 비교할 때 애용하게 될 것이라 생각합니다. 도움이 될 수 있도록 Snippet을 둡니다.
먼저 MNIST를 읽어 들이는 방법은 다음과 같습니다. 신경망에 넣기 좋게 784로 flatten하는 것입니다.
from keras.datasets import mnist
import numpy as np
(x_train, _), (x_test, _) = mnist.load_data() # MNIST 읽어들임
# MNIST 데이터를 정규화함.
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
# MNIST를 28by28에서 784로 길게 flatten함. 이렇게 하면 곧바로 입력으로 사용할 수 있음.
x_train = x_train.reshape((len(x_train), 784))
x_test = x_test.reshape((len(x_test), 784))
어쨌건 이렇게 만든 MNIST 입력을 신경망에 넣은 후에, 뭔가 쿵짝쿵짝 한 출력을 최초의 입력과 눈으로 비교하면 좋겠죠! 그건 다음과 같이 합니다.
# matplotlib을 import
import matplotlib.pyplot as plt
# random int import → random index 확인용
from random import randint
n = 10 # 몇개의 숫자를 확인할 것인지 설정
plt.figure(figsize=(20, 4)) : # 그림의 크기를 설정, 크기가 작으면 키우면 됨.
# n개 만큼 확인
for i in range(n):
# 테스트 데이터중 random index를 정함
idx = randint(0, len(x_test)) # x_test는 테스트 데이터
# plt.subplot(nrows,ncols,index) 이므로, row크기, column크기, index 입니다. 왼쪽부터 차례대로 subplot을 함
# 원본 데이터
ax = plt.subplot(2, n, i + 1) # 첫번째 row에 차례대로 그림
plt.imshow(x_test[idx].reshape(28, 28)) # 28 by 28 그림으로 reshape함
plt.gray()
ax.get_xaxis().set_visible(False) # 축을 그리지 않음
ax.get_yaxis().set_visible(False) # 축을 그리지 않음
# 재구성된 데이터
ax = plt.subplot(2, n, i + 1 + n) # 두번째 row에 차례대로 그림
plt.imshow(decoded_imgs[idx].reshape(28, 28)) # 28 by 28 그림으로 reshape함
plt.gray()
ax.get_xaxis().set_visible(False) # 축을 그리지 않음
ax.get_yaxis().set_visible(False) # 축을 그리지 않음
plt.show()
보통 이런 식의 결과물을 그릴 수가 있는데, 위 쪽이 원본/ 아래 쪽이 결과물입니다. 알아두면 편리한 방법입니다.
Copy&Paste로 잘 이용해 봅시다. 헤헤
댓글