(*이 시리즈의 내용은 모두 '인공지능 100점을 위한 파이썬 수학' 서적의 내용을 정리한 것입니다. 사진과 같은 자료들 또한 출처가 위 책임을 밝힙니다.)
양자화는 그림의 색을 저장할 때 어느 정도의 정밀도를 가지게 저장할 것인지를 결정한다.
한 점의 색이 흑백이면서 검고 흰 정도를 2단계로 표현할 수 있다.(이 때 정보는 0(검다) 또는 1(하얗다)을 의미한다)
이미지에서 양자화는 색의 정보를 저장하기 위한 이론이다.
2단계에서 4단계, 8단계로 색의 정보를 표현하는데, 단계가 높아질 수록 눈에 보이는 것과 유사하게 표현할 수 있다.
2단계는 0과 1로 표현하기 때문에 1개의 비트, 4단계는 두개, 8단계는 3개의 비트가 필요하다.
비트가 하나씩 늘어날 때마다 정밀도는 2배씩 증가한다.
내가 저장하려는 정보의 정밀도를 위해 몇 개의 비트가 필요한지 알아야하고, 이를 위해 양자화를 사용한다.(양자화로 정밀도를 알 수 있는게 아니라, 정밀도를 알기 위해 양자화를 사용한다!)
한 점을 흑백으로만 표현하면 윤곽선은 뚜렷해지지만 음영이나 여러 정보를 얻기 어려워진다.(p.154 사진 참고)
최근 스마트폰으로 사진을 찍으면 24비트 양자화된 정보를 저장한다.
일반적인 사진은 컬러 24비트 양자화 된 것이다.(즉, 빨(r), 초(g), 파(b)를 각각 24개의 비트로 나누어 저장)
각각의 화소, 픽셀은 RGB값을 저장하고 각각의 정보에 사용되는 비트는 24비트이다.
즉, 24(R)+24(G)+24(B)인 72비트에 하나의 점의 컬러값에 대한 정보를 저장한다.
8비트를 1바이트(1byte = 8bit)로 계산하면 각각의 픽셀은 9바이트의 컬러값 정보를 가진다.
압축되지 않은 영상 정보를 RAW 데이터라고 한다.
샘플링은 모든 입력값을 다 저장하는 것이 아니라 일정 간격으로 샘플을 모으고, 모인 샘플을 사용하겠다는 것이다.
즉, 원본 이미지의 크기를 그대로 사용하는 것이 아니라 그 중 일부를 떼어내서 사용하겠다는 뜻이다.
MNIST 데이터는 28x28 크기의 사진들 모음이다.
즉, 784개의 점이 모여서 하나의 사진이 되고, 신경망에 이 784개 점의 값이 입력된다.
(신경망 그림은 p.161 참고) 중간 H층이 존재하나 내부 값이 무엇인지 알 수 없는 부분이다.
이를 은닉층(Hidden Layer)라고 한다.
은닉층 내부의 값은 가려져 있고, 종종 변한다.
# MNIST에서 사진 가져오기
#그림 출력
import matplotlib.pyplot as plt
#keras에 있는 mnist datasets을 불러온다.
from keras.datasets import mnist
#load_data() 사용, train과 test 자료를 가져옴
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#그림 16개를(가로4 세로4) 보여주기 위한 설정값
fig, axes = plt.subplots(nrows=4, ncols=4)
ax = axes.ravel()
#16개의 훈련자료 이미지 화면 출력
for i in range(16):
image = x_train[1000+i] #1000이라는 숫자는 임의로 변경할 수 있다.
ax[i].imshow(image, cmap='Greys')
plt.show()
# 특정 이미지만 출력
image = x_train[9]
plt.imshow(image, cmap='Greys')
plt.show()
위 코드를 수행하면 결과는