MC, 2025
Ilustracja do artykułu: MNIST Python – Jak zbudować model rozpoznawania cyfr?

MNIST Python – Jak zbudować model rozpoznawania cyfr?

MNIST to jeden z najpopularniejszych zbiorów danych w dziedzinie uczenia maszynowego. Jest to zbiór zawierający obrazy ręcznie napisanych cyfr, który stał się standardem do testowania algorytmów rozpoznawania obrazów. W tym artykule omówimy, jak wykorzystać zbiór MNIST w Pythonie do tworzenia modeli rozpoznawania cyfr. Przedstawimy przykłady kodu oraz wyjaśnimy, jak zbudować podstawowy model rozpoznawania cyfr w Pythonie za pomocą popularnych bibliotek takich jak TensorFlow i Keras.

Co to jest MNIST?

MNIST (Modified National Institute of Standards and Technology) to zbiór danych składający się z 70 000 obrazów ręcznie napisanych cyfr od 0 do 9. Zbiór ten jest powszechnie używany do testowania algorytmów rozpoznawania obrazów oraz klasyfikacji w uczeniu maszynowym. Składa się z 60 000 obrazów do trenowania i 10 000 obrazów do testowania. Każdy obraz jest w skali szarości i ma rozmiar 28x28 pikseli, co czyni go stosunkowo małym i łatwym do przetworzenia, szczególnie dla początkujących.

Ze względu na swoją popularność, MNIST stał się podstawowym narzędziem edukacyjnym w uczeniu maszynowym. Istnieje wiele dostępnych narzędzi i bibliotek, które pozwalają na łatwe załadowanie tego zbioru danych i rozpoczęcie eksperymentowania z algorytmami klasyfikacji obrazów. W Pythonie możemy to zrobić za pomocą bibliotek takich jak Keras, TensorFlow, Scikit-learn, czy PyTorch.

Instalacja wymaganych bibliotek

Aby rozpocząć pracę z MNIST w Pythonie, będziesz musiał zainstalować kilka popularnych bibliotek. Jeśli jeszcze ich nie masz, możesz to zrobić za pomocą poniższych poleceń:

pip install tensorflow
pip install keras
pip install matplotlib
pip install numpy

Po zainstalowaniu tych bibliotek będziesz gotowy, aby pobrać i przetworzyć dane z MNIST, a także stworzyć swój pierwszy model rozpoznawania cyfr.

Załadowanie zbioru MNIST w Pythonie

Przygotowanie danych to jeden z pierwszych kroków w każdym projekcie związanym z uczeniem maszynowym. W przypadku MNIST, Keras oferuje prostą metodę do załadowania zbioru danych bezpośrednio z internetu. Poniżej znajdziesz przykład, jak załadować dane:

import tensorflow as tf
from tensorflow.keras.datasets import mnist

# Załaduj dane z MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Sprawdź kształt danych
print(x_train.shape)
print(y_train.shape)

W tym przypadku x_train to obrazy treningowe, a y_train to etykiety (cyfry) odpowiadające tym obrazom. x_test i y_test zawierają obrazy i etykiety testowe. Zauważ, że obrazy są zapisane jako tablice 28x28 pikseli, a etykiety to cyfry od 0 do 9.

Przygotowanie danych do modelu

Chociaż obrazy są dostępne w formie tablic, należy je odpowiednio przygotować, aby mogły zostać użyte w modelu sieci neuronowej. W tym celu przekształcamy dane wejściowe (obrazy) do formatu, który będzie odpowiedni do uczenia. Przykładowo, obrazy w MNIST są w skali szarości, a ich wartości pikseli mieszczą się w zakresie od 0 do 255. Znormalizujemy je, aby wartości pikseli mieściły się w przedziale od 0 do 1:

# Normalizowanie danych wejściowych
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# Zmieniamy kształt danych z (28, 28) na (784)
x_train = x_train.reshape(x_train.shape[0], 28 * 28)
x_test = x_test.reshape(x_test.shape[0], 28 * 28)

Po tym zabiegu, dane wejściowe są gotowe do użycia w modelu. Pamiętaj, że każdemu obrazowi przypisujemy etykietę (cyfrę od 0 do 9), która wskazuje, jaka cyfra jest przedstawiona na obrazie.

Tworzenie modelu sieci neuronowej

Teraz, gdy dane są gotowe, możemy stworzyć prosty model sieci neuronowej do klasyfikacji obrazów. Poniżej znajdziesz kod do stworzenia prostego modelu z jedną warstwą wejściową, warstwą ukrytą i warstwą wyjściową:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Stwórz model
model = Sequential()

# Dodaj warstwę wejściową (784 wejścia)
model.add(Dense(128, activation='relu', input_dim=28*28))

# Dodaj warstwę wyjściową (10 wyjść - liczba klas)
model.add(Dense(10, activation='softmax'))

# Kompiluj model
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

W tym przykładzie używamy funkcji aktywacji relu w warstwie ukrytej oraz softmax w warstwie wyjściowej. Funkcja aktywacji softmax jest szczególnie przydatna w zadaniach klasyfikacyjnych, ponieważ przekształca wyjścia modelu na prawdopodobieństwa, które sumują się do 1. Z kolei sparse_categorical_crossentropy to funkcja strat, która jest idealna do klasyfikacji wielu klas.

Trenowanie modelu

Po stworzeniu modelu, czas na jego trenowanie. Możemy to zrobić przy użyciu metody fit, podając dane treningowe oraz dane testowe:

# Trenowanie modelu
model.fit(x_train, y_train, epochs=5, batch_size=32)

Wartość epochs określa liczbę pełnych iteracji przez dane treningowe, a batch_size ustala liczbę próbek przetwarzanych w jednym kroku optymalizacji. Po przeprowadzeniu kilku epok, model powinien osiągnąć dobrą dokładność.

Ocena modelu

Po zakończeniu trenowania możemy ocenić model na danych testowych, aby sprawdzić, jak dobrze radzi sobie z klasyfikacją nowych obrazów:

# Ocena modelu
loss, accuracy = model.evaluate(x_test, y_test)
print(f'Dokładność na danych testowych: {accuracy * 100:.2f}%')

Po wytrenowaniu modelu jego dokładność na danych testowych powinna wynosić około 97-98%. Oczywiście, możliwe jest dalsze poprawianie modelu poprzez modyfikację architektury sieci, zwiększenie liczby epok, czy zastosowanie bardziej zaawansowanych technik, takich jak konwolucyjne sieci neuronowe (CNN), które są specjalnie zaprojektowane do pracy z obrazami.

Podsumowanie

W artykule zaprezentowaliśmy, jak wykorzystać zbiór MNIST w Pythonie do stworzenia podstawowego modelu rozpoznawania cyfr. Przedstawiliśmy proces ładowania danych, ich przygotowania, budowy modelu, trenowania oraz oceny jego dokładności. Choć stworzenie modelu na podstawie MNIST jest stosunkowo proste, stanowi doskonały punkt wyjścia do nauki o rozpoznawaniu obrazów oraz sieciach neuronowych w uczeniu maszynowym. Możliwości są niemal nieograniczone, a MNIST to tylko początek przygody z AI!

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: