Forward Pass: Από την Είσοδο στην Πρόβλεψη

2 λεπτά

Στόχος: να ακολουθήσετε τον υπολογισμό ενός δικτύου και να διακρίνετε εκπαίδευση και επαγωγή.

Η εμπρόσθια διάδοση (forward pass) εφαρμόζει κάθε στρώμα με τη σειρά. Παράγει τα logits, και μετά την απώλεια αν οι στόχοι είναι διαθέσιμοι. Δεν τροποποιεί κανένα βάρος.

python
logits = model(x)          # εμπρόσθια διάδοση
loss = criterion(logits, y)

Για μια παρτίδα x σχήματος (32, 20), ένα στρώμα Linear(20, 64) δίνει (32, 64). Ένα δεύτερο Linear(64, 4) δίνει (32, 4). Ο άξονας batch διατηρείται· ο τελευταίος άξονας αλλάζει ανάλογα με το στρώμα.

Εκπαίδευση και επαγωγή

Στην εκπαίδευση, το δίκτυο διατηρεί τις πληροφορίες που χρειάζονται για τον υπολογισμό των κλίσεων. Στην επαγωγή, απενεργοποιούμε αυτή την παρακολούθηση και θέτουμε το μοντέλο σε λειτουργία αξιολόγησης:

python
model.eval()
with torch.inference_mode():
    logits = model(x)
    predictions = logits.argmax(dim=1)

Το model.eval() ρυθμίζει τη συμπεριφορά του Dropout και του BatchNorm. Το inference_mode() αποφεύγει την κατασκευή του γράφου κλίσεων. Οι δύο πράξεις είναι συμπληρωματικές.

Ένας ανιχνεύσιμος υπολογισμός

Ένα δίκτυο είναι ένας γράφος πράξεων. Το PyTorch απομνημονεύει ποιες πράξεις παρήγαγαν κάθε τανυστή όταν requires_grad=True. Αυτό το ίχνος θα διασχιστεί με αντίστροφη σειρά από την οπισθοδιάδοση.

Παγίδες

  • Χρήση argmax πριν από τη συνάρτηση απώλειας: η πράξη καταστρέφει τη χρήσιμη πληροφορία για την κλίση.
  • Παράλειψη του model.eval() κατά την επικύρωση.
  • Υπολογισμός της επικύρωσης με παρακολούθηση κλίσεων και σπατάλη μνήμης.

Γρήγορος έλεγχος

Μαθαίνει η εμπρόσθια διάδοση; Γιατί καλούμε ταυτόχρονα eval() και inference_mode();

Απαντήσεις

Όχι, υπολογίζει. Το eval() αλλάζει ορισμένα στρώματα· το inference_mode() απενεργοποιεί τον γράφο κλίσεων.

Δραστηριότητα κατάκτησης — Συμβόλαιο επαγωγής

Γράψτε ένα ψευδο-τεστ που καλεί δύο φορές το ίδιο μοντέλο που περιέχει dropout, πρώτα σε λειτουργία εκπαίδευσης και μετά σε λειτουργία αξιολόγησης. Προβλέψτε ποια αποτελέσματα πρέπει να είναι ταυτόσημα και εξηγήστε τον διακριτό ρόλο του eval() και του inference_mode(). Παραδοτέο: τεστ και διάγνωση.

Εκπαίδευση και επαγωγή: δύο διακριτές διαδρομές

Ανάγνωση: η εμπρόσθια διάδοση υπολογίζει τις εξόδους και στις δύο περιπτώσεις, αλλά μόνο η διαδρομή εκπαίδευσης διατηρεί όσα χρειάζονται για τον υπολογισμό των κλίσεων. Στην επαγωγή, συνδυάστε model.eval() και torch.inference_mode(). Η παγίδα είναι να πιστέψετε ότι το ένα αντικαθιστά το άλλο: ελέγχουν διαφορετικούς μηχανισμούς.