Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Sieci neuronowe są ważną koncepcją w dziedzinie sztucznej inteligencji i uczenia maszynowego. Składają się z połączonych ze sobą węzłów, zorganizowanych w warstwy i naśladują działanie ludzkiego mózgu. Węzły reprezentują neurony ludzkiego mózgu.

Możesz stworzyć własną, prostą sieć neuronową klasyfikującą z wieloma klasami. Wytrenuj go, aby klasyfikował odręcznie pisane cyfry przy użyciu zestawu danych MNIST. Następnie możesz użyć wizji komputerowej do sklasyfikowania własnych odręcznych cyfr.

Co to jest klasyfikacja wieloklasowa?

Klasyfikacja wieloklasowa to rodzaj uczenia maszynowego, który może klasyfikować dane w więcej niż dwie kategorie. Sieci neuronowe używają klasyfikatora softmax do rozkładu prawdopodobieństwa na możliwe klasy.

Możesz użyć klasyfikacji wieloklasowej, aby sklasyfikować odręczne obrazy ze zbioru danych MNIST na 10 kategorii. Kategorie te będą odpowiadać cyfrom od 0 do 9.

instagram viewer

Zrozumienie zbioru danych MNIST

Zestaw danych MNIST jest popularnym zestawem danych porównawczych dla algorytmów uczenia maszynowego i wizji komputerowej. Zawiera 70 000 odręcznych obrazów w skali szarości o wymiarach 28 na 28 pikseli. Odręczne cyfry mieszczą się w zakresie od 0 do 9.

Przed zbudowaniem dowolnego modelu uczenia maszynowego ważne jest, aby zrozumieć, co zawiera zestaw danych. Zrozumienie zestawu danych umożliwi lepsze wstępne przetwarzanie danych.

Przygotowanie środowiska

Aby postępować zgodnie z tym samouczkiem, powinieneś znać podstawy Pythona. Powinieneś mieć również tzw podstawowa wiedza z zakresu uczenia maszynowego. Wreszcie, powinieneś czuć się komfortowo w korzystaniu z Jupyter Notebook lub Google Colab.

Pełny kod źródłowy jest dostępny w formacie Repozytorium GitHub.

Utwórz nowy notatnik Jupyter lub zaloguj się do Współpraca Google. Uruchom to polecenie, aby zainstalować wymagane pakiety:

!pip zainstaluj numpy matplotlib tensorflow opencv-python

Będziesz używać:

  • Matplotlib do wizualizacji danych.
  • NumPy do manipulowania tablicami.
  • TensorFlow do tworzenia i trenowania modelu.
  • OpenCV, aby zasilić model własnymi odręcznymi cyframi.

Importowanie niezbędnych modułów

Zaimportuj pakiety zainstalowane w swoim środowisku. Umożliwi to późniejsze wywołanie i użycie ich funkcji i modułów w kodzie.

import przepływ tensorowy Jak tf
z przepływ tensorowy import keras
import matplotlib.pyplot Jak plt
%matplotlib wbudowany
import liczba Jak np
import cv2

Drugi wiersz kodu importuje moduł Keras z pliku Biblioteka Google TensorFlow. Będziesz używać Keras do trenowania głębokiej sieci neuronowej z TensorFlow jako backendem.

Ładowanie i przeglądanie zestawu danych

Zestaw danych MNIST jest wbudowany w Keras. Załaduj zestaw danych MNIST i podziel go na zestawy uczące i testowe. Zestawu szkoleniowego użyjesz do wytrenowania modelu, a zestawu testowego do oceny dokładności modelu w klasyfikowaniu nowych, niewidocznych obrazów.

(pociąg_X, pociąg_y), (test_X, test_y) = keras.datasets.mnist.load_data()

Sprawdź długość zestawów treningowych i testowych. Zbiór danych MNIST zawiera 60 000 obrazów do trenowania i 10 000 obrazów do testowania.

len (pociąg X)
długość (X_test)

Sprawdź kształt pierwszego obrazu w zbiorze danych MNIST, który powinien mieć wymiary 28 na 28 pikseli. Następnie wydrukuj jego wartości w pikselach i zwizualizuj je za pomocą Matplotlib.

X_pociąg[0].kształt
X_pociąg[0]
plt.matshow (X_pociąg[0])
y_pociąg[0]

Dane wyjściowe wizualizacji są następujące:

Zwizualizowany obraz pokazuje, że pierwszy obraz w zbiorze danych zawiera liczbę pięć.

Wstępne przetwarzanie danych

Przed użyciem danych w zestawie danych do uczenia i testowania modelu należy go wstępnie przetworzyć. Przetwarzanie wstępne zwiększa dokładność modelu poprzez standaryzację danych.

Normalizowanie wartości pikseli

Normalizuj wartości pikseli obrazów w zbiorze danych, dzieląc każdą wartość przez 255. Wartości pikseli nieznormalizowanego zestawu danych mieszczą się w zakresie od 0 do 255, przy czym zero oznacza kolor czarny, a 255 kolor biały. Dzielenie wartości każdego piksela przez 255 zapewnia, że ​​każdy piksel mieści się w zakresie od 0 do 1. Ułatwia to modelowi poznanie odpowiednich funkcji i wzorców w danych.

X_pociąg = X_pociąg / 255
X_test = X_test / 255

Następnie wydrukuj wartości pikseli pierwszego obrazu.

X_pociąg[0]

Zauważ, że są teraz w zakresie od 0 do 1.

Konwersja macierzy obrazu na tablicę 1D

Warstwa wejściowa sieci neuronowej zazwyczaj oczekuje danych wejściowych 1D, więc utwórz tablicę 1D wartości pikseli obrazu. Aby to zrobić, użyj funkcji reshape() z liczbą rawów ustawioną na liczbę obrazów w zbiorze danych.

X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (dł. (X_test), 28 * 28)
X_pociąg_spłaszczony.kształt
X_pociąg_spłaszczony[0]

Twoje obrazy są teraz gotowe do trenowania i testowania modelu.

Tworzenie modelu głębokiej sieci neuronowej

Utwórz model sekwencyjny za pomocą modułu Keras Tensorflow, używając warstwy wejściowej, dwóch warstw ukrytych i warstwy wyjściowej. Ustaw kształt wejściowy na 28 na 28, ponieważ jest to kształt oryginalnych obrazów w zbiorze danych. Użyj 128 węzłów dla warstw ukrytych. Warstwa wyjściowa powinna mieć tylko 10 neuronów, ponieważ klasyfikujesz tylko cyfry od 0 do 9.

model = keras. Sekwencyjny([
keras.warstwy. Spłaszcz (input_shape=(28, 28)),

keras.warstwy. Gęsty(128, aktywacja='relu'),
keras.warstwy. Gęsty(128, aktywacja='relu'),

keras.warstwy. Gęsty(10, aktywacja=„miękki maks”)
])

Skompiluj model za pomocą adam optymalizator, sparse_categorical_crossentropy jako funkcję straty i metrykę do oceny wydajności modelu jako dokładność. Następnie dopasuj dane treningowe do modelu i ustaw liczbę epok na pięć.

model.compile (optymalizator =„adam”,
strata =„sparse_categorical_crossentropia”,
metryka=['dokładność'])

model.fit (pociąg_X, ciąg_y, epoki=5)

Trening modelu zajmie kilka minut. Po zakończeniu uczenia modelu oceń jego wydajność na zestawie testowym.

model.ocena (test_X, test_y)

Funkcja oceny zwróci stratę i dokładność modelu. Model zapewnia dokładność na poziomie 98%.

Używanie modelu do klasyfikowania własnych odręcznych cyfr

Aby sklasyfikować własne odręczne cyfry, musisz przygotować swoje obrazy tak, aby pasowały do ​​tych ze zbioru danych MNIST. Jeśli tego nie zrobisz, Twój model będzie działał słabo.

Aby wstępnie przetworzyć obrazy:

  1. Załaduj obraz zawierający cyfrę za pomocą OpenCV.
  2. Przekonwertuj go na skalę szarości i zmień rozmiar na 28 na 28 pikseli.
  3. Odwróć i znormalizuj wartości pikseli.
  4. Na koniec spłaszcz obraz do tablicy 1D.

Przekaż wstępnie przetworzony obraz do modelu w celu predykcji i wydrukuj przewidywaną wartość na ekranie.

img = cv2.odczytany(„cyfry/cyfra1.png”, cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('float32') / 255.0

# Spłaszcz obraz do tablicy 1D
input_data = img_normalized.flatten().reshape( 1,28,28)

# Dokonaj prognozy za pomocą modelu
predykcja = model.predict (dane_wejściowe)
wydrukować (f'Przewidywanie: {np.argmax (przewidywanie)}')

Przekazanie wstępnie przetworzonego obrazu zawierającego numer do modelu.

Dane wyjściowe modelu są następujące:

Model był w stanie poprawnie sklasyfikować cyfrę siedem.

Sieci neuronowe w chatbotach

Wykorzystanie sieci neuronowych eksplodowało w ciągu ostatnich kilku lat. Były one głównie używane w przetwarzaniu języka naturalnego do tłumaczenia języków i generatywnej sztucznej inteligencji.

Ostatnio wzrosła liczba chatbotów, które mogą komunikować się w sposób podobny do ludzkiego. Wykorzystują rodzaj sieci neuronowej znanej jako sieć neuronowa transformatora. Wejdź w interakcję z niektórymi z nich i poznaj moc sieci neuronowych.