τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
import torch
x = torch.arange(16).reshape(1,4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
a3 = x.sum(axis = 0,keepdim=True)
a4 = x.sum(axis = 0,keepdim=False)
a5 = x.sum(axis = 2,keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
import torch
x = torch.arange(16).reshape(4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
print(a)
print(a2)
print(x/a)
Συνδυάστε αυτά τα δύο παραδείγματα για να εξηγήσετε λεπτομερώς τις αλλαγές στον άξονα υπό διαφορετικές συνθήκες.
Η κατανόηση των πράξεων διαστάσεων σε τανυστές και άθροισης κατά μήκος συγκεκριμένων αξόνων στο PyTorch απαιτεί λίγο χρόνο. Ας αναλύσουμε αυτές τις λειτουργίες βήμα προς βήμα μέσα από δύο παραδείγματα και ας εξηγήσουμε λεπτομερώς τις αλλαγές των αξόνων σε διαφορετικές καταστάσεις.
import torch
x = torch.arange(16).reshape(1, 4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
a3 = x.sum(axis=0, keepdim=True)
a4 = x.sum(axis=0, keepdim=False)
a5 = x.sum(axis=2, keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Αυτό είναι ένα σχήμα του (1, 4, 4)
των τανυστών. Μπορούμε να το σκεφτούμε ως μια παρτίδα που περιέχει μια μήτρα 4x4.
x.sum(axis=1, keepdim=True)
Άθροισμα κατά τον άξονα 1 (δηλαδή την κατεύθυνση της δεύτερης διάστασης, 4), διατηρώντας τις διαστάσεις.
tensor([[[24, 28, 32, 36]]])
Το σχήμα γίνεται (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Άθροισμα κατά τον άξονα 1, δεν διατηρείται καμία διάσταση.
tensor([[24, 28, 32, 36]])
Το σχήμα γίνεται (1, 4)
。
x.sum(axis=0, keepdim=True)
Άθροισμα κατά τον άξονα 0 (δηλαδή την κατεύθυνση της πρώτης διάστασης, 1), διατηρώντας τις διαστάσεις.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Επειδή ο αρχικός τανυστής έχει μόνο ένα στοιχείο στον άξονα 0, το αποτέλεσμα είναι το ίδιο με τον αρχικό τανυστή, με σχήμα (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Άθροισμα κατά τον άξονα 0, η διάσταση δεν διατηρείται.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Το σχήμα γίνεται (4, 4)
。
x.sum(axis=2, keepdim=True)
Άθροισμα κατά τον άξονα 2 (δηλαδή την τρίτη διάσταση, την κατεύθυνση του 4), διατηρώντας τις διαστάσεις.
tensor([[[ 6],
[22],
[38],
[54]]])
Το σχήμα γίνεται (1, 4, 1)
。
keepdim=True
Οι αθροιστικές διαστάσεις θα διατηρηθούν, ο αριθμός των διαστάσεων του αποτελέσματος παραμένει αμετάβλητος, αλλά το μέγεθος των αθροιστικών διαστάσεων γίνεται 1.keepdim=False
Οι αθροιστικές διαστάσεις θα αφαιρεθούν και ο αριθμός των διαστάσεων στο αποτέλεσμα θα μειωθεί κατά 1.import torch
x = torch.arange(16).reshape(4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
print(a)
print(a2)
print(x/a)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Αυτό είναι ένα σχήμα του (4, 4)
των τανυστών.
x.sum(axis=1, keepdim=True)
Άθροισμα κατά τον άξονα 1 (δηλαδή την κατεύθυνση της δεύτερης διάστασης, 4), διατηρώντας τις διαστάσεις.
tensor([[ 6],
[22],
[38],
[54]])
Το σχήμα γίνεται (4, 1)
。
x.sum(axis=1, keepdim=False)
Άθροισμα κατά τον άξονα 1, δεν διατηρείται καμία διάσταση.
tensor([ 6, 22, 38, 54])
Το σχήμα γίνεται (4,)
。
x / a
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
[0.1818, 0.2273, 0.2727, 0.3182],
[0.2105, 0.2368, 0.2632, 0.2895],
[0.2222, 0.2407, 0.2593, 0.2778]])
Αυτό είναι το άθροισμα κάθε στοιχείου διαιρούμενο με την αντίστοιχη σειρά του, με αποτέλεσμα:
tensor([[ 0/6, 1/6, 2/6, 3/6],
[ 4/22, 5/22, 6/22, 7/22],
[ 8/38, 9/38, 10/38, 11/38],
[12/54, 13/54, 14/54, 15/54]])
χρήση keepdim=True
Κατά τη διατήρηση των διαστάσεων, η αθροιστική διάσταση γίνεται 1.χρήσηkeepdim=False
Όταν , αφαιρούνται οι αθροιστικές διαστάσεις.
Γιατί οι σειρές είναι σε στήλες αντί για reshape(1, 4, 4) Μόνο όταν το reshape(4, 4) είναι σε σειρές;
Ας εξετάσουμε πρώτα τις βασικές έννοιες:
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Παραγωγή:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Το σχήμα αυτού του τανυστή είναι (4, 4)
, αντιπροσωπεύει έναν πίνακα 4x4:
Εντάξειείναι οριζόντια:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Λίσταείναι κάθετη:
[ 0, 4, 8, 12]
[ 1, 5, 9, 13]
[ 2, 6, 10, 14]
[ 3, 7, 11, 15]
(1, 4, 4)
x = torch.arange(16).reshape(1, 4, 4)
print(x)
Παραγωγή:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Το σχήμα αυτού του τανυστή είναι (1, 4, 4)
, αντιπροσωπεύει έναν τρισδιάστατο τανυστή 1x4x4:
1
, υποδεικνύοντας το μέγεθος της παρτίδας.4
, αντιπροσωπεύει τον αριθμό των σειρών (γραμμές ανά πίνακα).4
, αντιπροσωπεύει τον αριθμό των στηλών (στήλες κάθε πίνακα).(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Παραγωγή:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Παραγωγή:
tensor([[[24, 28, 32, 36]]])
υπάρχει (1, 4, 4)
Στον τρισδιάστατο τανυστή, η πρώτη διάσταση αντιπροσωπεύει το μέγεθος παρτίδας, επομένως φαίνεται ότι κάθε πίνακας 4x4 εξακολουθεί να επεξεργάζεται με δισδιάστατο τρόπο κατά τη λειτουργία. Ωστόσο, επειδή προστίθεται μια διάσταση παρτίδας, συμπεριφέρεται διαφορετικά από έναν δισδιάστατο τανυστή στη λειτουργία αθροίσματος.
ΕΙΔΙΚΑ: