MNIST dataset
Stary, wyświechtany, ale nieustannie używany dataset do Computer Vision trafia dziś do posta. Dla tych, którzy go nie znają po krotce opiszę co zawiera. Pokażę też jak najszybciej rozpocząć prace z nim w jupyter notebook-u.
Dataset to zbiór danych to treningu czy walidacji w machine learning-u. Część z nich może być "o-label-owanych" a część nie. Co to znaczy? Jeżeli dostarczone dane (tutaj obrazki) powiązane są w zbiorze danych z jakąś pożądaną własnością, mówimy że posiadamy "labeled data". Dzięki temu nie musimy oznaczać danych sami, mając komplet danych do nauki modeli ("wejście" i "wyjście").
[Ten post jest fragmentem serii "Krok po kroku" wprowadzającej do uczenia maszynowego (Machine Learning). Zapraszam do zapoznania się z całością.]
Zawartość dataset-u
MNIST to zbiór 70'000 obrazów (60'000 treningowych i 10'000 testowych) w skali szarości, każdy o rozdzielczości 28x28 pikseli przedstawiające różne wersje ręcznie napisanych cyfr (0-9). Każdy z obrazów powiązany jest z wartością liczbową będącą równą cyfrze, którą obraz przedstawia. Oto kilka przykładów:
Jest to zbiór o tyle przyjemny, że :
- jest mały, bo mieści się cały w pamięci
- w sposób szybki da się na nim testować różne koncepcje (większe datasety potrzebują wielokrotnie więcej zasobów)
Pobieranie dataset-u
Jeżeli nie masz skonfigurowanego środowiska do pracy z Python-em (w tym jupyter notebook-a) zapraszam do opisu instrukcji instalacji.
Najprostszą metodą pobierania i pracy z datasetem, jaką udało mi się znaleźć jest instalacja pakietu "python-mnist". W oknie konsoli zatem wpisać musimy polecenie:
pip install python-mnist
Ze względów licencyjnych dane datasetu, należy pobrać z oryginalnej strony. Na szczęście dokumentacja pakietu python-mnist przychodzi to z pomocą. Pokazuje zautomatyzowany sposób pobierania dataseto, do którego potrzebujemy jednak mieś w swoim środowisku klienta git (systemu wersjonowania plików tekstowych). Dla tych, którzy nie mają git-a, komenda która go zainstaluje w Ubuntu to:
sudo apt-get install git
Potem należy sklonować repozytorium kodu, które zawiera skypt pobierający dataset:
git clone https://github.com/bwosh/python-mnist.git
wchodzimy do stworzonego katalogu:
cd python-mnist
i uruchamiamy pobieranie plików:
./get_data.sh
po wykonaniu tem operacji w podkatalogu 'data' powinny znaleźć się pliki:
t10k-images-idx3-ubyte
t10k-labels-idx1-ubyte
train-images-idx3-ubyte
train-labels-idx1-ubyte
Nazwy plików i format ich przechowywania mogą wydawać się magiczne, niemniej zainstalowany wcześniej pakiet pythona zajmie się wydobyciem danych do bardziej używalnej formy.
Zobaczmy to w kodzie
Po uruchomieniu jupyter notebooka, wpiszmy poniższy kod:
from mnist import MNIST
mndata = MNIST('./python-mnist/data/')
images, labels = mndata.load_training()
Kod ten importuje bibliotekę i przygotowuje dwie kolekcje:
- listę obrazów jako wektory o długości 784, każdy z wartością 0-255
- listę wartości równych prezentowanej cyfrze
Aby zwizualizować cyfry należy dokonać jeszcze kilku czynności:
- zaimportować bibliotekę wyświetlającą obrazy
- zaimportować bibliotekę numeryczną
- przekształcić obraz z wektora 784 to macierzy 28x28
- wyświetlić obraz z skali szarości
W kolejnej komórce jupyter notebooka napiszmy:
import matplotlib.pyplot as plt
import numpy as np
# Konwersja do typu np.ndarray
sample_image = np.array(images[0])
# Zmiana rozdzielczości do 28x28
sample_image = sample_image.resize(28,28)
# Dopasowanie wielkości wykresu
plt.figure(figsize=(2,2))
# Wyłączenie opisów osi X i Y
plt.axis('off')
# Pozakanie obrazu w skali szarości
plt.imshow(sample_image, cmap='gray')
Po uruchomieniu zobaczymy:
Od tego momentu można zacząć jakieś konkretne prace z datasetem, ale o tym innym razem....