Używanie VGG16 i ResNet50 jako modeli bazowych
keras.applications.VGG16(weights='imagenet', include_top=False), dodawanie własnej głowicy.
Używanie VGG16 i ResNet50 jako modeli bazowych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 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.
Moduł Keras Applications
tf.keras.applications zawiera dziesiątki wstępnie wytrenowanych architektur, które można pobrać jednym wierszem kodu. Dwa klasyczne przykłady to VGG16 (prosty, głęboki stos konwolucji 3x3) oraz ResNet50 (z połączeniami rezydualnymi, głębszy i dokładniejszy).
Wczytywanie VGG16 jako bazy
Wczytaj VGG16 z wagami ImageNet, ale bez jego głowicy klasyfikacyjnej, aby móc dołączyć własną.
from tensorflow.keras.applications import VGG16
base = VGG16(
weights="imagenet", # download pretrained weights
include_top=False, # drop the 1000-class classifier
input_shape=(224, 224, 3) # standard ImageNet input size
)Objaśnienie argumentów
weights="imagenet": wczytuje wstępnie wytrenowane wagi zamiast losowych.include_top=False: usuwa oryginalny gęsty klasyfikator, aby można było dodać własny.input_shape=(224,224,3): wysokość, szerokość i 3 kanały RGB.
To ustawienie include_top=False sprawia, że model można ponownie wykorzystać w nowym zadaniu.
Zamrażanie bazy
Ustaw base.trainable = False, aby wstępnie wytrenowane wagi konwolucyjne pozostały niezmienione podczas pierwszej fazy treningu. Uczyć się będzie tylko Twoja nowa głowica.
base.trainable = False
print(len(base.trainable_weights)) # -> 0 when frozenGlobalAveragePooling2D
Baza zwraca trójwymiarową mapę cech, taką jak (7, 7, 512). GlobalAveragePooling2D uśrednia każdy kanał w jego siatce przestrzennej, redukując go do pojedynczej wartości na kanał, czyli w tym przypadku do wektora o długości 512.
Zastępuje to ogromne połączenie Flatten + Dense, znacznie zmniejszając liczbę parametrów i ograniczając przeuczenie.
from tensorflow.keras.layers import GlobalAveragePooling2D
# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)Dodawanie głowicy wyjściowej Dense
Dołącz warstwę Dense o rozmiarze odpowiadającym liczbie klas. Użyj funkcji softmax dla klasyfikacji wieloklasowej lub sigmoid dla klasyfikacji binarnej.
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)Przejście na ResNet50
ResNet50 korzysta z tego samego interfejsu API. Jego rezydualne połączenia (połączenia pomijające) pozwalają trenować znacznie głębszy model bez zanikających gradientów, zwykle zapewniając wyższą dokładność na ImageNet niż VGG16 przy podobnej szybkości.
from tensorflow.keras.applications import ResNet50
base = ResNet50(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)
base.trainable = FalseVGG16 a ResNet50
- VGG16: około 138 mln parametrów, prosty jednolity stos warstw 3x3, duże zapotrzebowanie na pamięć, łatwy do zrozumienia.
- ResNet50: około 25 mln parametrów, bloki rezydualne, głębszy, zwykle dokładniejszy i lżejszy.
W większości współczesnych zadań uczenia transferowego ResNet50 jest lepszym wyborem domyślnym.
Dopasowanie wstępnego przetwarzania
Każda rodzina modeli ma własną funkcję preprocess_input. VGG16 odejmuje średnie wartości RGB, natomiast ResNet50 używa podobnego skalowania w stylu caffe. Zawsze importuj funkcję pasującą do używanej bazy.
from tensorflow.keras.applications.resnet50 import preprocess_input
x = preprocess_input(image_batch) # required for correct resultsKompilowanie modelu
Gdy baza jest zamrożona, skompiluj model i wytrenuj głowicę przy użyciu standardowego optymalizatora.
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)Sprawdzanie architektury
Wywołaj model.summary(), aby potwierdzić, że baza jest zamrożona (wartość Non-trainable params jest duża), a trenowana jest tylko głowica. Ta kontrola poprawności pozwala wcześnie wykryć błędy konfiguracji.
model.summary()
# Look at "Trainable params" vs "Non-trainable params"Szybki test
Sprawdź, jak dobrze rozumiesz budowanie modelu z uczeniem transferowym w Keras.
Podsumowanie
Wczytałeś VGG16 i ResNet50 z użyciem weights="imagenet", include_top=False oraz input_shape=(224,224,3), zamroziłeś bazę za pomocą base.trainable=False, zredukowałeś cechy za pomocą GlobalAveragePooling2D i dodałeś głowicę wyjściową Dense.
ResNet50 jest lepszym wyborem domyślnym. Następnie odblokujemy warstwy, aby przeprowadzić dostrajanie.
Często zadawane pytania
Czy lekcja „Używanie VGG16 i ResNet50 jako modeli bazowych” jest bezpłatna?
Tak — pełny tekst „Używanie VGG16 i ResNet50 jako modeli bazowych” 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 „Używanie VGG16 i ResNet50 jako modeli bazowych”?
keras.applications.VGG16(weights='imagenet', include_top=False), dodawanie własnej głowicy. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Używanie VGG16 i ResNet50 jako modeli bazowych”?
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