Τανυστές, Σχήματα και Δέσμες Δεδομένων

2 λεπτά

Στόχος: να διαβάζετε τις διαστάσεις ενός τανυστή και να προλαμβάνετε την πλειονότητα των σφαλμάτων σχήματος. Προαπαιτούμενο: βασικό NumPy.

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

ΔεδομένοΣυνηθισμένο σχήμα
Πυκνός πίνακας(batch, features)
Εικόνες PyTorch(batch, channels, height, width)
Κείμενο σε tokens(batch, sequence_length)
Logits πολλών κλάσεων(batch, classes)
python
import torch

x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4

Batch και mini-batch

Το batch ομαδοποιεί πολλά παραδείγματα που επεξεργάζονται παράλληλα. Ένα mini-batch 32 εικόνων παράγει μια εκτίμηση της κλίσης λιγότερο ακριβή από το πλήρες σύνολο, αλλά πολύ λιγότερο δαπανηρή. Αυτή η μικρή ποσότητα θορύβου μπορεί μάλιστα να βοηθήσει τη γενίκευση.

Τύπος και συσκευή

Τα βάρη είναι γενικά σε float32. Οι ετικέτες που περιμένει η CrossEntropyLoss είναι ακέραιοι torch.long. Όλα τα δεδομένα μιας πράξης πρέπει να βρίσκονται στην ίδια συσκευή: CPU, CUDA ή άλλος επιταχυντής.

python
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device=device, dtype=torch.float32)

Πειθαρχία των σχημάτων

Σε κάθε στρώμα, γράψτε το αναμενόμενο σχήμα πριν από τον κώδικα. Για ένα πυκνό στρώμα Linear(128, 10), ο τελευταίος εισερχόμενος άξονας πρέπει να έχει μέγεθος 128. Χρησιμοποιήστε το reshape με προσοχή και προτιμήστε το flatten(start_dim=1) για να διατηρήσετε τον άξονα του batch.

Παγίδες

  • Σύγχυση NHWC και NCHW.
  • Τυχαία αφαίρεση του άξονα batch με squeeze().
  • Αποστολή του μοντέλου στη GPU ενώ τα δεδομένα μένουν στη CPU.
  • Παροχή ετικετών float32 σε μια απώλεια που περιμένει δείκτες κλάσης.

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

Ποιο είναι το σχήμα 64 εικόνων RGB 32×32 στο PyTorch; Ποιον άξονα ερμηνεύει ένα πυκνό στρώμα ως διάσταση εισόδου;

Απαντήσεις

(64, 3, 32, 32). Το πυκνό στρώμα χρησιμοποιεί τον τελευταίο άξονα.

Δραστηριότητα κατάκτησης — Έλεγχος σχημάτων

Ξεκινήστε από X.shape = (32, 3, 64, 64). Περάστε το από μια συνέλιξη που παράγει 16 κανάλια, μια χωρική μείωση κατά δύο, ένα global pooling και μια κεφαλή 7 κλάσεων. Γράψτε κάθε σχήμα και τρεις assertions Python. Επιτυχία: ο άξονας της παρτίδας μένει 32 και η έξοδος είναι (32, 7).

Συμβόλαιο σχημάτων μιας παρτίδας εικόνων

Ανάγνωση: ο άξονας B διασχίζει όλο το δίκτυο· μόνο οι διαστάσεις αναπαράστασης μετασχηματίζονται. Πριν από την εκπαίδευση, ελέγξτε ρητά X.ndim, τη σειρά των καναλιών και τη συμφωνία μεταξύ logits.shape[0] και y.shape[0]. Η κύρια παγίδα είναι μια σιωπηλή μετάθεση των αξόνων: ο κώδικας μπορεί να εκτελείται ενώ μαθαίνει μια δομή που δεν έχει κανένα νόημα.