W dzisiejszej lekcji nauczymy się, jak zbudować i wytrenować prostą sieć neuronową od podstaw, skupiając się na praktycznym aspekcie głębokiego uczenia. Będziemy używać biblioteki TensorFlow i Keras, aby zrozumieć, jak dane przepływają przez sieć i jak dostosować parametry, aby uzyskać pożądane wyniki.
Sieci neuronowe to systemy inspirowane biologią, zbudowane z połączonych warstw neuronów. Każda warstwa przetwarza dane i przekazuje je do kolejnej warstwy. Kluczowymi elementami są:
Przykład: Wyobraź sobie warstwę gęstą z 3 neuronami. Każdy neuron ma wagę dla każdego wejścia i bias. Dane wejściowe (np. cechy obrazu) trafiają do warstwy, są przetwarzane przez neurony i przechodzą przez funkcję aktywacji, generując wyjście.
Keras to wysokopoziomowa biblioteka API do budowy i trenowania modeli uczenia maszynowego, uruchamiana na TensorFlow, Theano lub CNTK. Ułatwia budowę sieci neuronowych.
Krok 1: Importowanie bibliotek:
import tensorflow as tf
from tensorflow import keras
Krok 2: Definiowanie modelu:
model = keras.Sequential([
keras.layers.Dense(128, activation='relu', input_shape=(784,)), # Warstwa gęsta, ReLU, 784 wejść
keras.layers.Dense(10, activation='softmax') # Warstwa wyjściowa, Softmax, 10 wyjść (np. cyfry 0-9)
])
Krok 3: Kompilacja modelu:
model.compile(optimizer='adam', # Optymalizator
loss='sparse_categorical_crossentropy', # Funkcja straty
metrics=['accuracy']) # Metryki oceny
Krok 4: Trenowanie modelu:
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() # MNIST dataset
x_train = x_train.reshape(60000, 784) # Reshape do 784
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32') / 255 # Normalizacja
x_test = x_test.astype('float32') / 255
model.fit(x_train, y_train, epochs=5) # Trenowanie, 5 epok
Krok 5: Ocena modelu:
loss, accuracy = model.evaluate(x_test, y_test)
print(f'Dokładność na zbiorze testowym: {accuracy}')
Ten kod tworzy prostą sieć do rozpoznawania cyfr z zestawu danych MNIST. Zwróć uwagę na użycie Sequential
do budowy modelu warstwa po warstwie, funkcje relu
i softmax
, oraz adam
jako optymalizator.
Po wytrenowaniu, ważne jest zrozumienie, jak dobrze sieć działa i jak ją ulepszyć.
sparse_categorical_crossentropy
. Model stara się zminimalizować tę stratę. adam
, sgd
. Dostrajanie Parametrów: Eksperymentuj z różnymi funkcjami aktywacji, liczbą warstw, liczbą neuronów w warstwach i parametrami optymalizatora, aby poprawić wyniki.
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Witaj! Kontynuujemy naszą podróż po świecie głębokiego uczenia. Dzisiaj, po zbudowaniu i wytrenowaniu prostej sieci neuronowej, zagłębimy się bardziej w szczegóły, poszerzając naszą wiedzę i umiejętności. Przygotuj się na jeszcze więcej praktyki i ciekawych aspektów!
Poza podstawowymi warstwami (wejściowa, ukryte, wyjściowa) i funkcjami aktywacji (np. ReLU, Sigmoid), warto zrozumieć różne typy warstw i ich specyficzne zastosowania. Na przykład, warstwy konwolucyjne (Conv2D) są kluczowe w przetwarzaniu obrazów, wykrywaniu cech i rozpoznawaniu wzorców. Z kolei warstwy rekurencyjne (LSTM, GRU) świetnie radzą sobie z danymi sekwencyjnymi, jak tekst czy szeregi czasowe.
Architektura Sieci:
Dodatkowo, zrozumienie różnych strategii optymalizacji (np. Adam, SGD) i funkcji kosztu (np. entropia krzyżowa, błąd średniokwadratowy) jest kluczowe dla efektywnego uczenia. Pamiętaj, dobór odpowiednich parametrów to klucz do sukcesu! Można to porównać do doboru składników w przepisie – źle dobrane składniki (parametry) prowadzą do niesmacznego rezultatu (słabej wydajności modelu).
Zmodyfikuj prostą sieć neuronową, którą zbudowałeś wcześniej. Dodaj kolejną warstwę ukrytą. Zmień funkcję aktywacji w jednej z warstw (np. z ReLU na Tanh). Sprawdź, jak te zmiany wpływają na wydajność sieci na tym samym zestawie danych. Zanotuj i porównaj wyniki.
Wykorzystaj różne optymalizatory (np. Adam, SGD) i dostosuj współczynnik uczenia (learning rate). Wykorzystaj różne funkcje kosztu (np. mean_squared_error, categorical_crossentropy), jeśli to odpowiednie dla Twojego problemu. Które kombinacje dają najlepsze wyniki na Twoim zestawie danych? Pamiętaj, aby kontrolować proces i dokumentować swoje eksperymenty!
Głębokie uczenie to wszechobecne narzędzie. Wyobraź sobie:
Wyzwanie: Spróbuj zaimplementować sieć neuronową dla bardziej złożonego zestawu danych, na przykład datasetu MNIST (rozpoznawanie cyfr pisanych ręcznie) lub CIFAR-10 (rozpoznawanie obrazów). Użyj warstw konwolucyjnych, aby uzyskać lepsze wyniki. Porównaj z prostą siecią opartą na warstwach gęstych.
Uruchom powyższy kod budowy i trenowania prostej sieci dla MNIST w Google Colab. Zmodyfikuj liczbę epok i oceń wpływ na dokładność. Dodaj kolejną warstwę gęstą i sprawdź, czy to poprawia wyniki. Zapisz i udostępnij swoje notatki w Colab.
Zmień funkcję aktywacji w pierwszej warstwie na `sigmoid`. Porównaj wyniki z użyciem `relu`. Co zauważasz? Dlaczego `relu` jest często preferowane?
Zmień optymalizator na `sgd` i ustaw parametr `learning_rate` na 0.01. Jak to wpływa na proces uczenia i dokładność? Porównaj z `adam`.
Zbuduj prosty model klasyfikacji obrazów dla zbioru danych Fashion MNIST (ubrania) zamiast cyfr MNIST. Spróbuj zróżnicować wyniki od tego, co otrzymujesz z MNIST.
Zapoznaj się z konwolucyjnymi sieciami neuronowymi (CNN) i ich zastosowaniem do przetwarzania obrazów. Przeczytaj o popularnych metodach optymalizacji i o walidacji danych.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.