#mnist
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
print(독립.shape, 종속.shape)
결과 : (60000, 28, 28) (60000,)
mnist는 28X28 이미지 6만장으로 이루어져있고 이미지마다 어떤 숫자인지에 대한 정답이 6만개이다.
#CIFAR10
(독립, 종속), _ = tf.keras.datasets.cifar10.load_data()
print(독립.shape, 종속.shape)
결과 : (50000, 32, 32, 3) (50000, 1)
cifar10은 (32, 32, 3)이미지 5만장으로 이루어져있고 이미지마다 하나씩 총 5만개의 종속변수가 있다.
이때, 종속변수의 shape는 mnist의 경우 1차원이고 cifar10의 경우 2차원으로 차이가 있다.
#라이브러리 사용
import tensorflow as tf
#샘플 이미지셋 불러오기
(mnist_x, mnist_y), _ = tf.keras.datasets.mnist.load_data()
print(mnist_x.shape, mnist_y.shape)
(cifar_x, cifar_y), _ = tf.keras.datasets.cifar10.load_data()
print(cifar_x.shape, cifar_y.shape)
mnist 데이터를 불러와 독립변수와 종속변수를 각각 mnist_x, mnist_y 변수로 담았다.
cifar_10 데이터를 불러와 독립변수와 종속변수를 cifar_x와 cifar_y 변수에 담았다.
코드를 실행하면 다운로드가 이루어진다. 다운로드한 파일의 url이 결과에 출력되는데, 이미 받은 데이터는 다시 실행하더라도 다시 받아오지 않는다. 이미 파일을 받아온 상태이므로 받아온 파일이 로딩된다.
#이미지 출력하기
print(mnist_y[0:10])
import matplotlib.pyplot as plt
plt.imshow(mnist_x[4], cmap='gray')
print(cifar_y[0:10])
import matplotlib.pyplot as plt
plt.imshow(cifar_x[0])
plt에는 이미지를 보여주는 imshow()라는 함수가 있다.
그 함수로 이미지를 출력할 것이다.
mnist에 있는 총 6만장의 이미지 중 한장만 가져오기 위해 4번 이미지를 가져와서 출력한다. 회색조 이미지이므로 cmap = 'gray'로 설정
정답(cifar_y)중에서 첫 10개를 출력
첫번째 이미지(cifar_x[0])와 그에 해당하는 정답(cifar_y[0])을 함께 출력한다. 컬러이미지이므로 cmap='gray'옵션은 사용하지 않는다.
첫번째 이미지의 정답은 6이다.
분류가 숫자로 되어 있어 어떤 이미지인지 매치가 어렵다. 검색엔진에 'cifar10 category'를 검색하면 숫자와 이미질르 매칭해볼 수 잇다. 이미지를 화면에 출력해본 뒤, 정답이 어떻게 구성되어 있는지 matplotlib으로 확인해볼 수 있다.
#차원확인
import numpy as np
d1 = np.array([1,2,3,4,5])
print(d1.shape)
d2 = np.array([d1,d1,d1,d1])
print(d2.shape)
d3 = np.array([d2,d2,d2])
print(d3.shape)
d1은 숫자 다섯개를 넘파이 배열로 선언하며 1차원 형태이고 5개의 요소를 가진다. shape를 확인해본 결과 (5,)가 나왔고 숫자가 하나 들어 있으므로 깊이가 1차원임을 알 수 있다.
d2은 d1이 4개 들어있고 shape의 결과가 (4,5)로 숫자가 두개 들어있으므로 깊이가 2차원임을 확인할 수 있다.
d3은 d2가 3개 들어있고 shape의 결과가 (3,4,5)로 3차원임을 알 수 있다.
#(5,),(5,1),(1,5)비교
x1 = np.array([1,2,3,4,5])
print(x1.shape)
print(mnist_y[0:5])
print(mnist_y[0:5].shape)
x2 = np.array([[1,2,3,4,5]])
print(x2.shape)
x3 = np.array([[1]],[2],[3],[4],[5]])
print(x3.shape)
print(cifar_y[0:5])
print(cifar_y[0:5].shape)
앞에서 mnist의 종속변수(mnist_y)와 cifar10의 종속변수(cifar_y)의 shape가 달랐다.
이해를 돕기 위해 숫자가 5개 들어있는 x1을 선언하고 x1.shape를 출력해보았다. 출력결과 x1의 shape는 (5,)임을 확인할 수 있었다.
mnist_y에서 숫자 5개를 출력해본 결과 [5 0 4 1 9]라는 결과가 나왔고, mnist_y에서 5개만 끊어낸 mnist_y[0:5]의 shape는 x1의 shape와 똑같이 (5,)이 나왔다.
x2에는 대괄호가 두개 쓰였다. x2에는 [1,2,3,4,5]라는 배열 한개가 들어있다. 그래서 (1,5)라고 출력된다. 2차원 형태인데, 5개의 요소로 이루어진 배열을 한개 가지고 있는 것이다.
x2=np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]])
print(x2.shape)는 요소 5개짜리 배열을 3개 가지고 있으므로 shape이 (3,5)이다. 이는 d2 = np.array([d1,d1,d1,d1])과 비슷한 형태이다.
x3의 경우 요소를 각각 하나의 차원에 넣었기 때문에 각각의 차원에 5개의 요소가 2차원 상태로 들어가있음을 확인할 수 있다.
따라서 shape는 (5,1)이다.