Στόχος: να διαβάζετε τις διαστάσεις ενός τανυστή και να προλαμβάνετε την πλειονότητα των σφαλμάτων σχήματος. Προαπαιτούμενο: βασικό NumPy.
Ένας τανυστής είναι ένας ομοιογενής πολυδιάστατος πίνακας. Ένας βαθμωτός έχει μηδέν άξονες, ένα διάνυσμα έναν άξονα, ένας πίνακας δύο άξονες. Η τάξη δεν είναι ο αριθμός των στοιχείων: είναι ο αριθμός των αξόνων.
| Δεδομένο | Συνηθισμένο σχήμα |
|---|---|
| Πυκνός πίνακας | (batch, features) |
| Εικόνες PyTorch | (batch, channels, height, width) |
| Κείμενο σε tokens | (batch, sequence_length) |
| Logits πολλών κλάσεων | (batch, classes) |
import torch
x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4Το batch ομαδοποιεί πολλά παραδείγματα που επεξεργάζονται παράλληλα. Ένα mini-batch 32 εικόνων παράγει μια εκτίμηση της κλίσης λιγότερο ακριβή από το πλήρες σύνολο, αλλά πολύ λιγότερο δαπανηρή. Αυτή η μικρή ποσότητα θορύβου μπορεί μάλιστα να βοηθήσει τη γενίκευση.
Τα βάρη είναι γενικά σε float32. Οι ετικέτες που περιμένει η
CrossEntropyLoss είναι ακέραιοι torch.long. Όλα τα δεδομένα μιας πράξης
πρέπει να βρίσκονται στην ίδια συσκευή: CPU, CUDA ή άλλος επιταχυντής.
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.squeeze().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]. Η κύρια παγίδα είναι μια
σιωπηλή μετάθεση των αξόνων: ο κώδικας μπορεί να εκτελείται ενώ μαθαίνει μια δομή
που δεν έχει κανένα νόημα.