Lær AI med Python · Lektion

Begreber og strategier inden for transfer learning

Feature extraction kontra finetuning, fastlåste lag, hvornår transfer learning hjælper.

Lektion 1 af 413 trin

Begreber og strategier inden for transfer learning er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvad er overføringslæring

Overføringslæring genbruger en model, der er trænet på et stort datasæt, som udgangspunkt for en ny, relateret opgave. I stedet for at lære visuelle egenskaber fra bunden genbruger du egenskaber, som et netværk allerede har lært.

Det reducerer markant den mængde data og beregningskraft, du skal bruge for at opnå høj nøjagtighed.

Grundlaget i ImageNet

De fleste fortrænede synsmodeller trænes på ImageNet: omkring 1,4 millioner billeder fordelt på 1000 klasser.

Under denne træning lærer netværket et hierarki af egenskaber: kanter og farver i de tidlige lag, teksturer i de mellemste lag og dele af objekter nær toppen. Disse lavniveau-egenskaber kan overføres godt til næsten enhver billedopgave.

Hvorfor tidlige egenskaber kan overføres

De første foldningslag registrerer generelle mønstre (kanter, klumper og gradienter), som findes i alle naturlige billeder, uanset om det er katte, røntgenbilleder eller satellitfotos.

De dybere lag bliver mere opgavespecifikke, fordi de samler kanterne til dele af ImageNet-objekter. Derfor bevarer vi normalt de tidlige lag og udskifter eller træner de senere lag igen.

Strategi 1: Udtræk af egenskaber

Udtræk af egenskaber fastfryser hvert lag i det fortrænede basisnetværk, så dets vægte aldrig ændres. Basisnetværket fungerer som et fast udtræksmodul; du træner kun et lille nyt klassifikationshoved ovenpå.

Brug denne strategi, når dit datasæt er lille og ligner ImageNet. Den er hurtig og modvirker overtilpasning, fordi kun få parametre kan trænes.

base.trainable = False

model = Sequential([
    base,                      # frozen ImageNet features
    GlobalAveragePooling2D(),
    Dense(num_classes, activation="softmax")  # only this trains
])

Strategi 2: Finjustering

Finjustering frigiver de øverste lag i basisnetværket og træner dem igen sammen med hovedet, så netværket kan tilpasse sine egenskaber på højt niveau til dine specifikke data.

Brug denne strategi, når du har mere data, eller når dit domæne adskiller sig fra ImageNet (f.eks. medicinske scanninger). Finjustér altid med en meget lav læringsrate for at undgå at ødelægge de fortrænede vægte.

Udtræk af egenskaber kontra finjustering

  • Udtræk af egenskaber: basisnetværket er fastfrosset, kun hovedet trænes, meget hurtigt og bedst til små data, der ligner de oprindelige data.
  • Finjustering: de øverste lag i basisnetværket frigives sammen med hovedet, langsommere og bedst til større data, der adskiller sig fra de oprindelige data.

En almindelig fremgangsmåde er først at bruge udtræk af egenskaber og derefter finjustere i en anden fase, når hovedet er stabiliseret.

Krav til datamængde

Din strategi afhænger af, hvor meget data du har:

  • Et par hundrede billeder: kun udtræk af egenskaber (fastfrys alt).
  • Et par tusinde: udtræk af egenskaber, efterfulgt af finjustering af de øverste få lag.
  • Titusinder eller flere: finjustér større dele af basisnetværket, eventuelt hele netværket.

Mindre data betyder, at du skal fastfryse mere, fordi færre træningsbare parametre mindsker risikoen for overtilpasning.

Udskiftning af klassifikationshovedet

ImageNet-modeller returnerer 1000 klasser. Din opgave har sandsynligvis et andet antal, så du fjerner den oprindelige øverste del (include_top=False) og tilføjer dit eget hoved, der er dimensioneret til dine klasser.

from tensorflow.keras import layers, Model

x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.2)(x)
outputs = layers.Dense(5, activation="softmax")(x)  # 5 custom classes
model = Model(base.input, outputs)

Forbehandlingen skal passe

Hver fortrænet modelserie forventer, at input skaleres på samme måde som under ImageNet-træningen. Det er afgørende at bruge den tilsvarende preprocess_input, ellers falder nøjagtigheden drastisk.

from tensorflow.keras.applications.resnet50 import preprocess_input

# Scale pixels exactly as ResNet50 expects
x = preprocess_input(raw_image_batch)

Disciplin ved læringsraten

Under udtræk af egenskaber er en normal læringsrate (f.eks. 1e-3) fin, fordi kun det nye hoved trænes.

Under finjustering skal du sænke den til noget meget lille som 1e-5. Store opdateringer ville udviske de omhyggeligt indlærte ImageNet-vægte, en effekt der kaldes katastrofal glemsel.

En typisk arbejdsgang

  1. Indlæs et fortrænet basisnetværk med include_top=False.
  2. Fastfrys det, og træn et nyt hoved (udtræk af egenskaber).
  3. Frigiv de øverste lag, og træn igen med en meget lav læringsrate (finjustering).
  4. Evaluér, og konvertér til udrulning.

Denne trinvise fremgangsmåde giver høj nøjagtighed selv med forholdsvis små datasæt.

Hurtig kontrol

Kontrollér din forståelse af strategier til overføringslæring.

Opsummering

Du har lært, at overføringslæring genbruger ImageNet-fortrænede egenskaber (1,4 millioner billeder, 1000 klasser). Udtræk af egenskaber fastfryser basisnetværket til små datasæt, der ligner de oprindelige; finjustering frigiver de øverste lag med en meget lav læringsrate til større datasæt, der adskiller sig fra de oprindelige.

Tilpas forbehandlingen til basisnetværket, udskift hovedet med et, der passer til dine klasser, og brug en trinvis arbejdsgang. Derefter omsætter vi dette til kode med VGG16 og ResNet50.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
53
Lektioner
225

Ofte stillede spørgsmål

Er lektionen “Begreber og strategier inden for transfer learning” gratis?

Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Begreber og strategier inden for transfer learning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Begreber og strategier inden for transfer learning”?

Feature extraction kontra finetuning, fastlåste lag, hvornår transfer learning hjælper. Du øver dig i Lær AI med Python med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær AI med Python?

Der kræves ingen tidligere erfaring. Lær AI med Python på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Begreber og strategier inden for transfer learning”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær AI med Python-lektion?

Ja. Alle Lær AI med Python-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Begreber og strategier inden for transfer learning
  2. Brug af VGG16 og ResNet50 som basismodeller
  3. Finetuning: frigivelse og genindlæring
  4. MobileNet og EfficientNet til edge-deployment
← Tilbage til Lær AI med Python