Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Python Προγραμματισμός

Πώς μπορεί να χρησιμοποιηθεί το NP.Tensordot για την αποτελεσματική εκτέλεση λειτουργιών προϊόντων Tensor DOT στην Python;

Το «NP.Tensordot» παρέχει έναν ευέλικτο τρόπο για την εκτέλεση συστολών Tensor (γενικευμένα προϊόντα DOT) σε Numpy, σημαντικά πιο αποτελεσματικά από ό, τι εφαρμόζοντας με χειροκίνητα ένθετα βρόχους για μεγαλύτερους τανυστήρες. Η αποτελεσματικότητά του προέρχεται από τη μόχλευση βελτιστοποιημένων ρουτίνων BLAS (βασικές γραμμικές algebra subprograms) κάτω από την κουκούλα.

Εδώ λειτουργεί το "np.tensordot` και πώς να το χρησιμοποιήσετε αποτελεσματικά:

Κατανόηση της παραμέτρου των αξόνων:

Ο πυρήνας του `np.tensordot 'βρίσκεται στην παράμετρο των αξόνων. Αυτή η παράμετρος καθορίζει ποιοι άξονες των συστοιχιών εισόδου (`a` και` b`) πρέπει να αθροίζονται κατά τη διάρκεια του προϊόντος dot. Μπορεί να είναι:

* Ακέραιος: Αυτό καθορίζει τον αριθμό των άξονων σε άθροισμα από το * άκρο * κάθε πίνακα. Αν «άξονες =1», αθροίζεται στον τελευταίο άξονα του «Α» και στον τελευταίο άξονα του «Β». Εάν «άξονες =2», αθροίζεται στους τελευταίους δύο άξονες του καθενός και ούτω καθεξής. Αυτή είναι η απλούστερη μορφή.

* Μια πλειάδα δύο ακολουθιών: Αυτό παρέχει τον μεγαλύτερο έλεγχο. Κάθε ακολουθία καθορίζει τους άξονες των «a» και «b» αντίστοιχα, που πρέπει να συμβληθούν (αθροίζονται). Τα μήκη των ακολουθιών πρέπει να είναι ίσα.

Παραδείγματα:

1.

`` `Python

Εισαγωγή Numpy ως NP

a =np.array ([[1, 2], [3, 4]])

b =np.array ([[5, 6], [7, 8]])

Πρότυπο πολλαπλασιασμού μήτρας (άξονες =1 σιωπηρά)

c =np.tensordot (a, b, άξονες =1) # ισοδύναμο με np.dot (a, b)

Εκτύπωση (C) # έξοδος:[[19 22] [43 50]]

Καθορισμός άξονων ρητά

c =np.tensordot (a, b, άξονες =((1), (0))) #Same όπως παραπάνω

Εκτύπωση (C) # έξοδος:[[19 22] [43 50]]

`` `

2.

`` `Python

a =np.arange (24) .Reshape ((2,3,4))

b =np.arange (24) .Reshape ((4,3,2))

άθροισμα στον τελευταίο άξονα του «Α» και του πρώτου άξονα του «Β»

c =np.tensordot (a, b, άξονες =([2], [0])))

εκτύπωση (C.Shape) # έξοδος:(2, 3, 3, 2)

#Πιο σύνθετη συστολή:

c =np.tensordot (a, b, άξονες =([(0,2)], [(1,0)])))))

εκτύπωση (C.Shape) #output:(3, 2)

`` `

3.

Το "NP.Tensordot" εκτελεί αποτελεσματικά λειτουργίες παρόμοιες με τις σημειώσεις αθροίσεως του Αϊνστάιν. Για παράδειγμα, εάν το `a` είναι (i, j, k) και` b` είναι (k, l), τότε η συστολή πάνω από το `k` μπορεί να γραφτεί ως:

`C_ {ijl} =\ sum_k a_ {ijk} b_ {kl}`

Αυτό μπορεί να επιτευχθεί αποτελεσματικά με:

`` `Python

a =np.random.rand (2,3,4)

b =np.random.rand (4,5)

c =np.tensordot (a, b, άξονες =([2], [0])))

εκτύπωση (C.Shape) # έξοδος:(2, 3, 5)

`` `

Σκέψεις αποδοτικότητας:

* σειρά αξόνων: Η σειρά με την οποία καθορίζετε τους άξονες μπορεί να επηρεάσει την απόδοση. Οι εσωτερικές βελτιστοποιήσεις του Numpy μπορεί να είναι πιο αποτελεσματικές με ορισμένες παραγγελίες. Πείραμα για να βρείτε την ταχύτερη διαμόρφωση για τους συγκεκριμένους τανυστήρες σας.

* Χρήση μνήμης: Για εξαιρετικά μεγάλους τανυστήρες, το `np.tensordot` μπορεί να οδηγήσει σε προβλήματα μνήμης. Σε τέτοιες περιπτώσεις, εξετάστε το ενδεχόμενο να χρησιμοποιήσετε επαναληπτικές μεθόδους ή βιβλιοθήκες σχεδιασμένες για λειτουργίες μεγάλης κλίμακας τανυστή (όπως TensorFlow ή Pytorch), οι οποίες συχνά έχουν καλύτερες στρατηγικές διαχείρισης μνήμης.

* Εναλλακτική λύση για απλές περιπτώσεις: Για απλά προϊόντα dot ή πολλαπλασιασμούς μήτρας, το `np.dot` ή`@`operator είναι συνήθως ταχύτερος από το` np.tensordot '.

Συνοπτικά, το `np.tensordot` είναι ένα ισχυρό εργαλείο, αλλά η κατανόηση της παράμετρος` axes` είναι ζωτικής σημασίας για την αποτελεσματική και σωστή χρήση. Επιλέξτε τη σωστή μέθοδο βάσει της πολυπλοκότητας των λειτουργιών σας Tensor και του μεγέθους των δεδομένων σας για να βελτιστοποιήσετε τόσο την ταχύτητα όσο και τη χρήση της μνήμης.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα