티스토리 친구하기

본문 바로가기

딥러닝/Your own dataset

mnist your own dataset - mnist download

728x90

Update

2019.7.19: Posting

2019.8.17: 폰트 및 오타 수정

 

1. 학습할 데이터를 폴더에 저장하기

 

  앞서 포스팅에서 말했듯이 MNIST dataset은 단 2줄의 코드로 다운로드하여 사용할 수 있지만, 여기서는 MNIST dataset을 잘 정리된 dataset이 아니라 우리가 측정하거나, 인터넷 크롤링, 그리고 다양한 방법으로 획득한 raw 데이터라고 가정하고 포스팅을 진행할 것이다. 포스팅을 진행하기 위해서, 측정을 통해 데이터를 획득하는 대신 MNIST dataset을 다운로드하도록 하자. MNIST dataset은 구글 검색 또는 다음의 구글 드라이브에서 다운로드할 수 있다.

 

구글 검색: mnist image download

or

https://drive.google.com/file/d/1e2QUgaRp4Dovj-3QKfUsuzmHzxhsb9Bc/view?usp=sharing

 

다운로드한 mnist dataset의 directory structure는 다음과 같다.

 

training data는 60,000개, 그리고 testing data는 10,000개가 존재한다. 이미지는 크기가 28 x 28인 png파일이다. 이제부터 위의 mnist dataset을 내가 수집한 데이터라고 가정하고 데이터를 불러오는 것부터 차근차근 진행해 보도록 하자.

 

 

2. 데이터를 코드로 불러오기 (데이터 목록 or csv 파일 불러오기)

 

(1) 데이터 목록 가져오기

  첫 번째로 데이터가 위치한 경로정보를 이용해서 나의 이미지 데이터를 코드로 불러오도록 하자. 데이터가 위치한 경로정보를 받아오기 위해서는 다음과 같이 'glob' 모듈을 이용한다.

 

from glob import glob
DATA_PATH_LIST = glob('./mnist_png/training/*/*.png')
# print(DATA_PAHT_LIST)

 

모듈이란 자주 사용되는 기능을 이미 코드로 구현해 놓은 것[1]을 말하며, 'glob 모듈' 은 파일이 위치한 경로를 포함한 파일의 리스트는 가져온다. 위의 코드에서 DATA_PATH_LIST를 출력하면 다음과 같이 60,000개의 경로를 포함한 파일의 리스트가 출력된다.

 

위의 코드에서 아스테리스크 (*) 기호는 '모든 파일'을 의미한다. 즉, 위의 코드에서 './mnist_png/training/*/*. png'의 의미는 'mnist_png' 밑에 있는 디렉터리인 'training' 그리고 그 밑에 있는 '모든 디렉터리 (*)', 그리고 '그 모든 디렉터리' 밑에 있는 '모든 파일'을 불러오라는 듯이다. 

 

(2) csv 파일 불러오기

  csv (comma-separated values)의 약자로 쉼표(,)로 구분되는 텍스트 데이터 및 파일을 의미한다 [2]. 많은 데이터들이 csv 형식으로 저장되기 때문에, csv 파일을 불러오는 코드도 함께 소개한다. csv 파일을 불러오기 위해서 사용하는 파이썬 모듈은 'pandas'이다. 코드를 보기 전에 먼저 csv 형식으로 저장된 mnist dataset을 다음의 구글 드라이브에서 다운로드한다.

 

https://drive.google.com/file/d/1C01pT-giQD3EPizEu--61uPfQUXOukM5/view?usp=sharing

 

 

import pandas as pd
image = pd.read_csv(r'~/Desktop/seg/cnn/csv_image.csv', encoding='cp949')/255
label = pd.read_csv(r'~/Desktop/seg/cnn/csv_label.csv', encoding='cp949')
image_array = np.array(image, dtype='f')
label_array = np.array(label, dtype='f')

 

구글 드라이브에 있는 csv 파일은 training image (60,000 x 784), training label (60,000 x 10) , test image (10,000 x 784), test label (10,000 x 10)로 이루어져 있다. (사실 크기가 (59,999 x 784) 되어있다. 파일 하나가 어디로 간 거지ㅠㅠ) 위의 코드는 training image와 training label만 불러오는 코드이다. 각각의 csv 파일이 저장되어 있는 디렉터리의 경로를 코드로 적고, 'pandas' 모듈의 'read_csv'를 이용해서 csv 형식으로 저장된 이미지 데이터들과 라벨 데이터를 모두 image와 label 변수에 저장한다. image 변수에 저장된 이미지 데이터의 각 pixel의 범위는 0~255 이므로 범위를 0~1 사이로 바꾸기 위해 255로 나눠주었다.  'cp949'는 한글 지원을 위해 윈도우즈 계열에서 나온 완성형 코드 조합[3]을 의미하는데, 자세한 내용은 참조를 확인하길 바란다. 마지막으로, 불러온 데이터들은 np.array 형식으로 저장한다. 그리고 소수점이 포함되어 있기 때문에 파일 형식은 float32 형식 (dtype='f')로 설정한다. 

 

 

참조

[1] https://wikidocs.net/3139

[2] https://ko.wikipedia.org/wiki/CSV_(%ED%8C%8C%EC%9D%BC_%ED%98%95%EC%8B%9D)

[3] https://onlywis.tistory.com/2

 

파일 다운로드

* mnist image dataset: https://drive.google.com/file/d/1e2QUgaRp4Dovj-3QKfUsuzmHzxhsb9Bc/view?usp=sharing

* mnist dataset csv file: https://drive.google.com/file/d/1C01pT-giQD3EPizEu--61uPfQUXOukM5/view?usp=sharing

 

반응형