Transfer Learning & Overfitting

Warum Kanten- und Textur-Detektoren neu lernen, die schon tausendmal gelernt wurden? Transfer Learning nimmt ein auf ImageNet vortrainiertes Netz und tauscht nur den Klassifikator aus. Und am Ende dieser Lektion wartet die wichtigste Erkenntnis des ganzen Themas — die PlantVillage-Falle.

Rezept: Vortrainierte Basis einfrieren → eigenen Kopf (Pooling + Dense 38) drauf → Kopf trainieren → optional die obersten Basis-Schichten mit Mini-Lernrate auftauen (Fine-Tuning).

MobileNetV2 als gefrorene Basis

PYTHONtransfer.py
from tensorflow import keras
from tensorflow.keras import layers

basis = keras.applications.MobileNetV2(
    input_shape=(128, 128, 3),
    include_top=False,        # ImageNet-Klassifikator (1000 Klassen) weg
    weights="imagenet",
)
basis.trainable = False       # Phase 1: Basis komplett einfrieren

modell = keras.Sequential([
    keras.Input(shape=(128, 128, 3)),
    layers.RandomFlip("horizontal"),
    layers.RandomRotation(0.1),
    # MobileNetV2 erwartet Pixel in [-1, 1] — NICHT Rescaling(1/255)!
    layers.Lambda(keras.applications.mobilenet_v2.preprocess_input),
    basis,
    layers.GlobalAveragePooling2D(),
    layers.Dropout(0.3),
    layers.Dense(38, activation="softmax"),
])

modell.compile(
    optimizer=keras.optimizers.Adam(1e-3),
    loss="sparse_categorical_crossentropy",
    metrics=["accuracy"],
)
modell.fit(train_ds, validation_data=val_ds, epochs=10)

Phase 2: Fine-Tuning (optional, vorsichtig)

PYTHONfinetuning.py
basis.trainable = True
for layer in basis.layers[:-30]:    # nur die obersten ~30 Schichten auftauen
    layer.trainable = False

modell.compile(
    optimizer=keras.optimizers.Adam(1e-5),   # 100x kleinere Lernrate!
    loss="sparse_categorical_crossentropy",
    metrics=["accuracy"],
)
modell.fit(train_ds, validation_data=val_ds, epochs=5)

Mit eingefrorener Basis trainieren nur ~49.000 Kopf-Parameter — das geht auch ohne große GPU in Minuten und erreicht auf PlantVillage schnell 97 %+. Fine-Tuning legt oft noch ein bis zwei Punkte drauf, kann aber bei zu großer Lernrate das vortrainierte Wissen zerstören.

Overfitting erkennen — die Lernkurven lesen

  1. Gesund: Training- und Validation-Loss sinken gemeinsam, kleiner Abstand.
  2. Overfitting: Training-Loss sinkt weiter, Validation-Loss dreht nach oben — ab da lernt das Netz auswendig. Gegenmittel: mehr Augmentation, mehr Dropout, früher stoppen, kleineres Netz.
  3. Underfitting: Beide Kurven stagnieren hoch — das Netz ist zu klein, die Lernrate falsch oder die Daten kaputt (Rescaling-Bug!).

Die PlantVillage-Falle

Jetzt die unbequeme Wahrheit. Mohanty et al. trainierten 2016 CNNs auf PlantVillage: 99,35 % Accuracy. Dieselben Modelle auf Blatt-Fotos aus anderen Quellen getestet: die Accuracy stürzte auf etwa 31 % ab. Das Modell hatte nicht nur Krankheiten gelernt, sondern auch Aufnahmebedingungen: einheitlicher Hintergrund, Beleuchtung, Kamera. Im Feld — andere Hintergründe, Schatten, mehrere Blätter — bricht das alles weg.

Warum eigentlich?Warum hilft ImageNet-Wissen bei Blättern?
ImageNet enthält kaum kranke Blätter — aber die frühen und mittleren Schichten eines darauf trainierten Netzes lernen universelle Bild-Bausteine: Kanten, Texturen, Farbübergänge, einfache Formen. Diese Bausteine sind für Hunde, Autos und Blattflecken dieselben. Nur die späten, aufgaben-spezifischen Schichten müssen neu — genau die tauschen wir aus. Je näher die Zielaufgabe an natürlichen Fotos liegt, desto besser funktioniert der Transfer; bei Röntgenbildern oder Spektrogrammen ist der Gewinn deutlich kleiner.
Häufiger Denkfehler99 % melden und fertig
Für die Projektabgabe die Versuchung schlechthin: 99 % auf dem PlantVillage-Test-Set berichten und den Deckel draufmachen. Aber das Test-Set teilt die Aufnahmebedingungen mit dem Training — es misst Generalisierung innerhalb des Labors, nicht in der Welt. Wer es ernst meint, beschafft eine Handvoll Feldfotos (eigene Kamera, echter Garten) als Zweit-Test-Set und berichtet beide Zahlen. Die Diskrepanz ist kein peinlicher Makel, sondern das interessanteste Ergebnis der Arbeit.
Tiefer reinDomain Shift — das eigentliche Problem benennen
Die Falle hat einen Namen: Domain Shift. Training- und Einsatzverteilung unterscheiden sich — P(Bild) im Labor ≠ P(Bild) im Feld. Gegenmittel in aufsteigender Aufwandsstufe: härtere Augmentation (zufällige Hintergründe, Beleuchtung), Mischen mehrerer Datasets, Domain-Adaptation-Verfahren, oder schlicht Felddaten sammeln und nachtrainieren. Merksatz für jede ML-Arbeit: Ein Modell ist so gut wie die Ähnlichkeit zwischen Trainingsverteilung und Einsatzverteilung.