Dostrajanie: odmrażanie i ponowne trenowanie
base_model.trainable = True, odmrażanie warstw krok po kroku, zróżnicowane współczynniki uczenia.
Dostrajanie: odmrażanie i ponowne trenowanie to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Kiedy stosować dostrajanie
Po wytrenowaniu głowicy w ramach ekstrakcji cech dostrajanie pozwala uzyskać dodatkową dokładność, umożliwiając górnej części wstępnie wytrenowanej bazy dostosowanie się do danych. Wykonaj je dopiero po ustabilizowaniu głowicy, ponieważ duże gradienty pochodzące z losowej głowicy mogą uszkodzić bazę.
Odblokowywanie bazy
Ustaw base.trainable = True, aby ponownie umożliwić aktualizowanie wag. Samo to odblokuje każdą warstwę, co zwykle jest zbyt agresywne.
base.trainable = True
print("Trainable layers:", sum(l.trainable for l in base.layers))Zamrażanie pierwszych N warstw
Wczesne warstwy zawierają ogólne detektory krawędzi i tekstur, które chcesz zachować. Zamroź ponownie pierwszych N warstw i dostrajaj tylko głębsze warstwy specyficzne dla zadania.
base.trainable = True
freeze_until = 100 # keep first 100 layers frozen
for layer in base.layers[:freeze_until]:
layer.trainable = False
for layer in base.layers[freeze_until:]:
layer.trainable = TrueDlaczego potrzebny jest bardzo mały współczynnik uczenia
Dostrajanie wymaga bardzo małego współczynnika uczenia, na przykład 1e-5. Wstępnie wytrenowane wagi są już dobre, dlatego chcesz je tylko delikatnie skorygować. Duża wartość powoduje katastrofalne zapominanie, zacierając wiedzę z ImageNet, po którą sięgnąłeś.
Ponowna kompilacja po odblokowaniu
Po zmianie flag trainable musisz ponownie skompilować model, aby Keras ponownie określił, które wagi otrzymają gradienty. W tym miejscu ustaw mały współczynnik uczenia.
from tensorflow.keras.optimizers import Adam
model.compile(
optimizer=Adam(learning_rate=1e-5),
loss="categorical_crossentropy",
metrics=["accuracy"]
)Proces dwuetapowy
- Faza 1 (ekstrakcja cech): baza zamrożona, trenuj głowicę przy wartości około 1e-3, aż dokładność walidacyjna przestanie rosnąć.
- Faza 2 (dostrajanie): odblokuj górne warstwy, skompiluj model ponownie przy wartości około 1e-5 i kontynuuj trening.
Taki podział stabilizuje trening i chroni wstępnie wytrenowane cechy.
Kontynuowanie treningu w fazie 2
Wznów trening od miejsca, w którym zakończyła się faza 1, używając initial_epoch, aby zachować ciągłość logów i harmonogramów.
history2 = model.fit(
train_ds,
validation_data=val_ds,
epochs=20,
initial_epoch=10 # phase 1 ended at epoch 10
)Harmonogram współczynnika uczenia
Harmonogram z czasem zmniejsza współczynnik uczenia, dzięki czemu aktualizacje stają się mniejsze w miarę zbiegania modelu. ReduceLROnPlateau automatycznie obniża jego wartość, gdy strata walidacyjna przestaje się zmniejszać.
from tensorflow.keras.callbacks import ReduceLROnPlateau
lr_cb = ReduceLROnPlateau(
monitor="val_loss", factor=0.5,
patience=2, min_lr=1e-7
)
model.fit(train_ds, validation_data=val_ds,
epochs=20, callbacks=[lr_cb])Ostrzeżenie dotyczące BatchNorm
ResNet i EfficientNet zawierają warstwy BatchNormalization, które śledzą statystyki bieżące. Podczas dostrajania pozostawienie warstw BN zamrożonych (lub w trybie wnioskowania) często zapewnia stabilniejsze wyniki, ponieważ aktualizowanie ich statystyk na małym zbiorze danych może pogorszyć dokładność.
Uważaj na przeuczenie
Dostrajanie dodaje wiele parametrów podlegających uczeniu, dlatego rośnie ryzyko przeuczenia. Należy przeciwdziałać mu za pomocą augmentacji danych, dropout oraz EarlyStopping na podstawie straty walidacyjnej.
from tensorflow.keras.callbacks import EarlyStopping
stop = EarlyStopping(monitor="val_loss",
patience=4,
restore_best_weights=True)Składanie wszystkiego w całość
Solidny przebieg dostrajania obejmuje wytrenowanie głowicy, odmrożenie górnych warstw, zamrożenie BN, ponowną kompilację przy szybkości uczenia 1e-5, a następnie trening z harmonogramem i wczesnym zatrzymywaniem. Zawsze należy porównać dokładność walidacyjną przed dostrajaniem i po nim, aby potwierdzić, że rzeczywiście przyniosło ono poprawę.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat dostrajania.
Podsumowanie
Nauczono się dostrajać model przez ustawienie base.trainable=True, ponowne zamrożenie pierwszych N warstw, ponowną kompilację przy bardzo małej szybkości uczenia (1e-5) oraz przeprowadzenie procesu dwuetapowego. Harmonogram szybkości uczenia i wczesne zatrzymywanie pomagają zachować stabilność, a warstwy BatchNorm wymagają szczególnej uwagi. Dalej: lekkie modele do wdrażania na urządzeniach brzegowych.
Często zadawane pytania
Czy lekcja „Dostrajanie: odmrażanie i ponowne trenowanie” jest bezpłatna?
Tak — pełny tekst „Dostrajanie: odmrażanie i ponowne trenowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Dostrajanie: odmrażanie i ponowne trenowanie”?
base_model.trainable = True, odmrażanie warstw krok po kroku, zróżnicowane współczynniki uczenia. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Dostrajanie: odmrażanie i ponowne trenowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Koncepcje i strategie uczenia transferowego
- Używanie VGG16 i ResNet50 jako modeli bazowych
- Dostrajanie: odmrażanie i ponowne trenowanie
- MobileNet i EfficientNet na potrzeby wdrażania na urządzeniach brzegowych