Spis treści[Ukryć][Pokazać]
W ostatnich latach sieci neuronowe zyskały na popularności, ponieważ okazały się niezwykle dobre w szerokim zakresie zadań.
Okazało się, że są doskonałym wyborem do rozpoznawania obrazu i dźwięku, przetwarzania języka naturalnego, a nawet do grania w skomplikowane gry, takie jak Go i szachy.
W tym poście przeprowadzę Cię przez cały proces uczenia sieci neuronowej. Wspomnę i wyjaśnię wszystkie kroki do wytrenowania sieci neuronowej.
Podczas gdy omówię kroki, chciałbym dodać prosty przykład, aby upewnić się, że istnieje również praktyczny przykład.
Więc chodź i nauczmy się przetwarzać sieci neuronowe
Zacznijmy od prostego pytania, czym są sieci neuronowe na pierwszym miejscu.
Czym dokładnie są sieci neuronowe?
Sieci neuronowe to oprogramowanie komputerowe, które symuluje działanie ludzkiego mózgu. Mogą uczyć się na podstawie ogromnych ilości danych i dostrzegać wzorce, które mogą być trudne do wykrycia.
Sieci neuronowe zyskały na popularności w ostatnich latach ze względu na ich wszechstronność w zadaniach, takich jak rozpoznawanie obrazu i dźwięku, przetwarzanie języka naturalnego i modelowanie predykcyjne.
Ogólnie rzecz biorąc, sieci neuronowe są silnym narzędziem do szerokiego zakresu zastosowań i mają szansę zmienić sposób, w jaki podchodzimy do wielu różnych zadań.
Dlaczego powinniśmy o nich wiedzieć?
Zrozumienie sieci neuronowych ma kluczowe znaczenie, ponieważ doprowadziły one do odkryć w różnych dziedzinach, w tym widzenia komputerowego, rozpoznawania mowy i przetwarzania języka naturalnego.
Na przykład sieci neuronowe leżą u podstaw najnowszych osiągnięć w dziedzinie samojezdnych samochodów, automatycznych usług tłumaczeniowych, a nawet diagnostyki medycznej.
Zrozumienie, jak działają sieci neuronowe i jak je projektować, pomaga nam tworzyć nowe i pomysłowe aplikacje. Być może w przyszłości może to doprowadzić do jeszcze większych odkryć.
Uwaga dotycząca samouczka
Jak powiedziałem powyżej, chciałbym wyjaśnić kroki uczenia sieci neuronowej na przykładzie. Aby to zrobić, powinniśmy porozmawiać o zbiorze danych MNIST. Jest to popularny wybór dla początkujących, którzy chcą rozpocząć pracę z sieciami neuronowymi.
MNIST to akronim oznaczający Zmodyfikowany Narodowy Instytut Standardów i Technologii. Jest to odręczny zestaw danych cyfrowych, który jest powszechnie używany do uczenia i testowania modeli uczenia maszynowego, zwłaszcza sieci neuronowych.
Kolekcja zawiera 70,000 0 zdjęć w skali szarości z odręcznymi cyframi z zakresu od 9 do XNUMX.
Zbiór danych MNIST jest popularnym punktem odniesienia dla klasyfikacja obrazu zadania. Jest często używany do nauczania i uczenia się, ponieważ jest kompaktowy i łatwy w obsłudze, a jednocześnie stanowi trudne wyzwanie dla algorytmów uczenia maszynowego.
Zestaw danych MNIST jest obsługiwany przez kilka struktur i bibliotek uczenia maszynowego, w tym TensorFlow, Keras i PyTorch.
Teraz, gdy wiemy już o zbiorze danych MNIST, zacznijmy od naszych kroków uczenia sieci neuronowej.
Podstawowe kroki uczenia sieci neuronowej
Importuj niezbędne biblioteki
Kiedy po raz pierwszy zaczynasz trenować sieć neuronową, bardzo ważne jest posiadanie narzędzi niezbędnych do zaprojektowania i nauczenia modelu. Pierwszym krokiem w tworzeniu sieci neuronowej jest zaimportowanie wymaganych bibliotek, takich jak TensorFlow, Keras i NumPy.
Biblioteki te służą jako elementy składowe do rozwoju sieci neuronowej i zapewniają kluczowe możliwości. Połączenie tych bibliotek pozwala na tworzenie skomplikowanych projektów sieci neuronowych oraz szybkie ich uczenie.
Na początek nasz przykład; zaimportujemy wymagane biblioteki, w tym TensorFlow, Keras i NumPy. TensorFlow to platforma uczenia maszynowego typu open source, Keras to interfejs API sieci neuronowej wysokiego poziomu, a NumPy to biblioteka Pythona do obliczeń numerycznych.
import tensorflow as tf
from tensorflow import keras
import numpy as np
Załaduj zbiór danych
Zestaw danych musi teraz zostać załadowany. Zbiór danych to zbiór danych, na których będzie trenowana sieć neuronowa. Może to być dowolny typ danych, w tym zdjęcia, dźwięk i tekst.
Bardzo ważne jest podzielenie zbioru danych na dwie części: jedną do uczenia sieci neuronowej i drugą do oceny poprawności wytrenowanego modelu. Do zaimportowania zestawu danych można użyć kilku bibliotek, w tym TensorFlow, Keras i PyTorch.
W naszym przykładzie używamy również Keras do załadowania zestawu danych MNIST. W zbiorze danych znajduje się 60,000 10,000 zdjęć treningowych i XNUMX XNUMX obrazów testowych.
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Wstępne przetwarzanie danych
Wstępne przetwarzanie danych jest ważnym etapem uczenia sieci neuronowej. Polega na przygotowaniu i oczyszczeniu danych przed wprowadzeniem ich do sieci neuronowej.
Skalowanie wartości pikseli, normalizowanie danych i konwertowanie etykiet do kodowania na gorąco to przykłady procedur przetwarzania wstępnego. Procesy te wspomagają sieć neuronową w skuteczniejszym i bardziej precyzyjnym uczeniu się.
Wstępne przetwarzanie danych może również pomóc zminimalizować przeuczenie i poprawić wydajność sieci neuronowej.
Przed przystąpieniem do uczenia sieci neuronowej należy wstępnie przetworzyć dane. Obejmuje to zmianę etykiet na jednokierunkowe kodowanie i skalowanie wartości pikseli w zakresie od 0 do 1.
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, 10)
test_labels = keras.utils.to_categorical(test_labels, 10)
Zdefiniuj model
Proces definiowania modelu sieci neuronowej polega na ustaleniu jej architektury, takiej jak liczba warstw, liczba neuronów w warstwie, funkcje aktywacji oraz typ sieci (sprzężenie wyprzedzające, rekurencyjna lub konwolucyjna).
Projekt sieci neuronowej, którego używasz, zależy od rodzaju problemu, który próbujesz rozwiązać. Dobrze zdefiniowany projekt sieci neuronowej może pomóc w uczeniu się sieci neuronowej, czyniąc ją bardziej wydajną i dokładną.
Czas w tym miejscu opisać model sieci neuronowej. W tym przykładzie użyj prostego modelu z dwiema warstwami ukrytymi, każda po 128 neuronów, oraz warstwą wyjściową softmax, która ma 10 neuronów.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
Skompiluj model
Podczas kompilacji modelu sieci neuronowej należy określić funkcję strat, optymalizator i metryki. Zdolność sieci neuronowej do prawidłowego prognozowania danych wyjściowych jest mierzona funkcją strat.
Aby zwiększyć dokładność sieci neuronowej podczas uczenia, optymalizator modyfikuje jej wagi. Skuteczność sieci neuronowej podczas treningu jest mierzona za pomocą metryk. Model musi zostać utworzony przed nauczeniem sieci neuronowej.
W naszym przykładzie musimy od razu skonstruować model.
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Trenuj model
Przekazywanie przygotowanego zestawu danych przez sieć neuronową z modyfikacją wag sieci w celu zminimalizowania funkcji strat jest znane jako uczenie sieci neuronowej.
Zbiór danych walidacyjnych jest używany do testowania sieci neuronowej podczas szkolenia w celu śledzenia jej skuteczności i zapobiegania nadmiernemu dopasowaniu. Proces uczenia może zająć trochę czasu, dlatego ważne jest, aby upewnić się, że sieć neuronowa jest odpowiednio przeszkolona, aby zapobiec niedopasowaniu.
Korzystając z danych treningowych, możemy teraz trenować model. Aby to zrobić, musimy zdefiniować wielkość partii (liczbę próbek przetworzonych przed aktualizacją modelu) oraz liczbę epok (liczbę powtórzeń w całym zbiorze danych).
model.fit(train_images, train_labels, epochs=10, batch_size=32)
Ocena modelu
Testowanie wydajności sieci neuronowej na testowym zbiorze danych to proces jej oceny. Na tym etapie wytrenowana sieć neuronowa jest używana do przetwarzania testowego zestawu danych i oceniana jest dokładność.
Miarą jej dokładności jest to, jak skutecznie sieć neuronowa może prognozować właściwy wynik na podstawie zupełnie nowych, niesprawdzonych danych. Analiza modelu może pomóc określić, jak dobrze działa sieć neuronowa, a także zasugerować sposoby jej ulepszenia.
Możemy w końcu ocenić wydajność modelu za pomocą danych testowych po treningu.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
To wszystko! Przeszkoliliśmy sieć neuronową do wykrywania cyfr w zbiorze danych MNIST.
Od przygotowania danych po ocenę skuteczności wytrenowanego modelu, uczenie sieci neuronowej obejmuje kilka procesów. Te instrukcje pomagają nowicjuszom w efektywnym budowaniu i szkoleniu sieci neuronowych.
Początkujący, którzy chcą używać sieci neuronowych do rozwiązywania różnych problemów, mogą to zrobić, postępując zgodnie z tymi instrukcjami.
Wizualizacja przykładu
Spróbujmy zwizualizować, co zrobiliśmy z tym przykładem, aby lepiej zrozumieć.
Pakiet Matplotlib jest używany w tym fragmencie kodu do wykreślenia losowego wyboru zdjęć z zestawu danych szkoleniowych. Najpierw importujemy moduł „pyplot” Matplotlib i nazywamy go „plt”. Następnie o całkowitym wymiarze 10 na 10 cali tworzymy figurę z 5 rzędami i 5 kolumnami wątków pobocznych.
Następnie używamy pętli for do iteracji po wątkach podrzędnych, wyświetlając obraz z zestawu danych szkoleniowych na każdym z nich. Do wyświetlenia zdjęcia służy funkcja „imshow”, przy czym opcja „cmap” jest ustawiona na „szary”, aby wyświetlać zdjęcia w skali szarości. Tytuł każdego wątku pobocznego jest również ustawiony na etykiecie powiązanego obrazu w kolekcji.
Na koniec używamy funkcji „pokaż”, aby wyświetlić wykreślone obrazy na rysunku. Ta funkcja umożliwia nam wizualną ocenę próbki zdjęć ze zbioru danych, co może pomóc w zrozumieniu danych i zidentyfikowaniu ewentualnych problemów.
import matplotlib.pyplot as plt
# Plot a random sample of images
fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(10,10))
for i, ax in enumerate(axes.flat):
ax.imshow(train_images[i], cmap='gray')
ax.set_title(f"Label: {train_labels[i].argmax()}")
ax.axis('off')
plt.show()
Ważne modele sieci neuronowych
- Sprzężone sieci neuronowe (FFNN): Prosty rodzaj sieci neuronowej, w której informacje przemieszczają się tylko w jeden sposób, z warstwy wejściowej do warstwy wyjściowej przez jedną lub więcej warstw ukrytych.
- Konwolucyjne sieci neuronowe (CNN): Sieć neuronowa powszechnie stosowana w wykrywaniu i przetwarzaniu obrazów. Sieci CNN mają na celu automatyczne rozpoznawanie i wyodrębnianie cech z obrazów.
- Powtarzające się sieci neuronowe (RNN): Sieć neuronowa powszechnie stosowana w wykrywaniu i przetwarzaniu obrazów. Sieci CNN mają na celu automatyczne rozpoznawanie i wyodrębnianie cech z obrazów.
- Sieci z pamięcią długoterminową (LSTM): Forma RNN stworzona w celu przezwyciężenia problemu znikających gradientów w standardowych RNN. Długoterminowe zależności w danych sekwencyjnych można lepiej uchwycić za pomocą LSTM.
- autoenkodery: Sieć neuronowa ucząca się bez nadzoru, w której sieć jest uczona odtwarzania danych wejściowych w warstwie wyjściowej. Kompresja danych, wykrywanie anomalii i odszumianie obrazu mogą być realizowane za pomocą autoenkoderów.
- Generatywne sieci kontradyktoryjne (GAN): Generatywna sieć neuronowa jest formą sieci neuronowej, która jest nauczona generowania nowych danych, które są porównywalne z zestawem danych szkoleniowych. Sieci GAN składają się z dwóch sieci: sieci generatora, która tworzy świeże dane, oraz sieci dyskryminatora, która ocenia jakość tworzonych danych.
Podsumowanie, jakie powinny być Twoje następne kroki?
Zapoznaj się z kilkoma zasobami i kursami online, aby dowiedzieć się więcej o szkoleniu sieci neuronowej. Praca nad projektami lub przykładami to jedna z metod lepszego zrozumienia sieci neuronowych.
Zacznij od prostych przykładów, takich jak problemy z klasyfikacją binarną lub zadania z klasyfikacją obrazów, a następnie przejdź do trudniejszych zadań, takich jak przetwarzanie języka naturalnego lub uczenie się wzmacniania.
Praca nad projektami pozwala na zdobycie prawdziwego doświadczenia i doskonalenie umiejętności szkolenia z sieci neuronowych.
Możesz także dołączyć do grup i forów zajmujących się uczeniem maszynowym i sieciami neuronowymi, aby wchodzić w interakcje z innymi uczniami i profesjonalistami, dzielić się swoją pracą oraz otrzymywać komentarze i pomoc.
LSRS MONRAD-KROHN
⁶ĵChciałbym zobaczyć program w Pythonie do minimalizacji błędów. Specjalne węzły selekcji umożliwiające zmianę ciężaru na następną warstwę