# Overview the Data Set
본 튜토리얼에서는 수화 데이터를 사용한다. 데이터셋 다운로드와 상세한 데이터셋에 대한 설명은 다음 링크를 참조한다.
- 데이터셋 다운로드 https://www.kaggle.com/ardamavi/sign-language-digits-dataset
- 데이터셋 개요 https://www.kaggle.com/ardamavi/sign-language-digits-dataset/home
아래 코드를 실행시키면 input 디렉토리에 있는 파일 디렉토리가 호출된다.
1 2 3 4 5 6 7 | import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') from subprocess import check_output | cs |
Sign-language-digits-dataset
- 숫자를 나타내는 수화 이미지 2,062개가 포함되어 있음
- 숫자는 0 에서 9로 총 10개의 유니크한 기호가 포함되어 있음
- 튜토리얼 앞 부분에서는 이해를 돕기 위해 0과 1만 사용하여 진행함
- 데이터에는 인덱스 204 에서 408 까지 총 205개의 0과 822 에서 1027까지 206개의 1 사인이 있음, 따라서 205개의 샘플을 사용하게 됨. 물론 205개의 샘플은 무지하기 적은 수이기는 함
그러면 X, Y 배열을 준비한다. X 는 이미지 배열 (0, 1 사인)이고, Y 는 라벨 배열 (0 과 1)이다.
1 2 3 4 5 6 7 8 9 | x_l = np.load('../input/Sign-language-digits-dataset/X.npy') Y_l = np.load('../input/Sign-language-digits-dataset/Y.npy') img_size = 64 plt.subplot(1, 2, 1) plt.imshow(x_l[260].reshape(img_size, img_size)) plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(x_l[900].reshape(img_size, img_size)) plt.axis('off') | cs |
(-0.5, 63.5, 63.5, -0.5)
- plt.subplot https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html
- plt.axis https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axis.html
이미지 배열을 생성하기 위해, 0 과 1 배열을 하나로 합친다. 그리고 0 사인 이미지에는 0 배열을, 1 사인 이미지에는 1 배열을 생성한다.
1 2 3 4 5 6 7 | # Join a sequence of arrays along an row axis. X = np.concatenate((x_l[204:409], x_l[822:1027] ), axis=0) z = np.zeros(205) o = np.ones(205) Y = np.concatenate((z, o), axis=0).reshape(X.shape[0],1) print("X shape: " , X.shape) print("Y shape: " , Y.shape) | cs |
X shape: (410, 64, 64)
Y shape: (410, 1)
X 배열의 형태는 (410, 64, 64) 이다. 여기서 410은 0과 1을 이미지를 합친 갯수를 말한다. 그리고 64는 이미지의 크기가 64x64 라는 의미이다. Y 배열은 (410,1) 의 형태를 가지는데, 410개의 0과 1 라벨을 가진다는 의미이다. 이제 X 와 Y 배열을 훈련셋과 테스트셋으로 나눠보자.
test_size 는 테스트 사이즈의 비중을 나타내는 것으로 여기서는 15% 로 잡았다. 그리고 random_state 는 랜덤화하는 동안 같은 시드를 사용하는 것으로, 같은 random_state 를 가지면, train_test_split 를 반복적으로 호출하면 같은 훈련 및 검증 분포를 생성하게 된다.
고정된 random_state 일 때 프로그램 실행마다 똑같은 결과를 산출한다. 따라서 문제가있는 경우 디버그하고 식별하기가 쉽다. random_state 를 설정하지 않으면 알고리즘을 실행할 때마다 다른 시드가 사용되며 다른 결과가 나온다.
* https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
1 2 3 4 5 | # Then lets create x_train, y_train, x_test, y_test arrays from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.15, random_state=42) number_of_train = X_train.shape[0] number_of_test = X_test.shape[0] | cs |
1 | number_of_train | cs |
348
1 | number_of_test | cs |
62
15% 테스트 비중에 맞게 적절히 분배되었음을 알 수 있다.
1 | X_train.shape | cs |
(348, 64, 64)
1 | Y_train.shape | cs |
(348, 1)
위에서 보듯이 이제 3차원의 입력 배열(X) 가지게 되었다. 이제 그것을 2D 로 평탄화시킬 필요가 있다. 라벨 배열 (Y) 은 이미 2D 이므로 손댈 필요가 없다. 그러면 이미지 배열 X 를 평탄화시켜보자.
1 2 3 4 | X_train_flatten = X_train.reshape(number_of_train,X_train.shape[1]*X_train.shape[2]) X_test_flatten = X_test .reshape(number_of_test,X_test.shape[1]*X_test.shape[2]) print("X train flatten",X_train_flatten.shape) print("X test flatten",X_test_flatten.shape) | cs |
X train flatten (348, 4096)
X test flatten (62, 4096)
위에서 보다시피 이미지 train 배열에는 348개의 이미지가 포함되고 각 이미지는 4096 픽셀의 크기를 가진다. 그리고 test 배열에도 마찬가지로 4096 픽셀의 62개의 이미지를 가지게 된다. 이제 전치를 시키자.
12345678 x_train = X_train_flatten.Tx_test = X_test_flatten.Ty_train = Y_train.Ty_test = Y_test.Tprint("x train: ",x_train.shape)print("x test: ",x_test.shape)print("y train: ",y_train.shape)print("y test: ",y_test.shape)cs
x train: (4096, 348) x test: (4096, 62) y train: (1, 348) y test: (1, 62) 이미지 train 배열에는 348개의 이미지가 포함되고 각 이미지는 4096 픽셀의 크기를 가진다. 그리고 \es
지금까지 0과 1을 나타내는 라벨(클래스) 선택하고, 훈련 및 검증 셋트 생성 및 평탄화 작업을 했다. 최종 입력(이미지)와 출력(라벨 또는 클래스)는 다음과 같다.
image source https://image.ibb.co/fOqCSc/3.png
'프로그래밍 Programming' 카테고리의 다른 글
파이썬 3.6 아나콘다 PIL 설치하기 ModuleNotFoundError: No module named 'PIL' 과 UnsatisfiableError (0) | 2018.12.24 |
---|---|
Deep Learning Tutorial for Beginners - 2. Logistic Regression (0) | 2018.12.20 |
케라스 딥러닝 이진분류 Classifying movie reviews: a binary classification example (0) | 2018.12.15 |
아나콘다 matplotlib 설치 (0) | 2018.12.15 |
딥러닝 툴 설치하기 Anaconda, Jupyter Notebook, TensorFlow and Keras for Deep Learning (0) | 2018.12.15 |