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

Ανασκόπηση: Η βαθιά μάθηση του MXNet λάμπει με τον Gluon

Όταν αναθεώρησα το MXNet v0.7 το 2016, ένιωσα ότι ήταν ένα πολλά υποσχόμενο πλαίσιο βαθιάς μάθησης με εξαιρετική επεκτασιμότητα (σχεδόν γραμμική σε συστάδες GPU), καλή αυτόματη διαφοροποίηση και υποστήριξη τελευταίας τεχνολογίας για GPU CUDA. Ένιωσα επίσης ότι χρειαζόταν εργασία για την τεκμηρίωση και τα σεμινάριά του, και χρειάστηκε πολύ περισσότερα παραδείγματα στον ζωολογικό κήπο του μοντέλου. Επιπλέον, θα ήθελα να δω μια διεπαφή υψηλού επιπέδου για το MXNet, το οποίο φαντάστηκα ότι θα ήταν Keras.

Από τότε, έχει σημειωθεί αρκετή πρόοδος. Το MXNet μετακόμισε κάτω από την ομπρέλα του Apache Software Foundation στις αρχές του 2017 και παρόλο που «επωάζεται» στην έκδοση 1.3, αισθάνεται αρκετά καλά.

Ενώ έχει γίνει δουλειά στο Keras με MXNet back end, μια διαφορετική διεπαφή υψηλού επιπέδου έχει γίνει πολύ πιο σημαντική: Gluon. Πριν από την ενσωμάτωση του Gluon, θα μπορούσατε είτε να γράψετε έναν εύκολο επιτακτικό κώδικα είτε έναν γρήγορο συμβολικό κώδικα στο MXNet, αλλά όχι και τα δύο ταυτόχρονα. Με το Gluon, μπορείτε να συνδυάσετε τα καλύτερα και των δύο κόσμων, με τρόπο που ανταγωνίζεται τόσο την Keras όσο και την PyTorch.

Τι είναι το Gluon για το MXNet;

Τα πλεονεκτήματα που απαιτούνται για το Gluon περιλαμβάνουν απλό κώδικα, ευέλικτη μοντελοποίηση, δυναμικά γραφήματα και υψηλή απόδοση:

  1. Απλός, κατανοητός κώδικας: Το Gluon προσφέρει ένα πλήρες σύνολο δομικών μονάδων νευρωνικού δικτύου plug-and-play, συμπεριλαμβανομένων προκαθορισμένων επιπέδων, βελτιστοποιητών και αρχικοποιητών.
  2. Ευέλικτη, επιτακτική δομή: Το Gluon δεν απαιτεί τον αυστηρό καθορισμό του μοντέλου νευρικού δικτύου, αλλά φέρνει πιο κοντά τον αλγόριθμο εκπαίδευσης και το μοντέλο για να παρέχει ευελιξία στη διαδικασία ανάπτυξης.
  3. Δυναμικά γραφήματα: Το Gluon επιτρέπει στους προγραμματιστές να ορίζουν μοντέλα νευρωνικών δικτύων που είναι δυναμικά, πράγμα που σημαίνει ότι μπορούν να κατασκευαστούν εν κινήσει, με οποιαδήποτε δομή και χρησιμοποιώντας οποιαδήποτε από τις φυσικές ροές ελέγχου της Python.
  4. Υψηλή απόδοση: Το Gluon παρέχει όλα τα παραπάνω οφέλη χωρίς να επηρεάζει την ταχύτητα προπόνησης που παρέχει ο υποκείμενος κινητήρας.

Αυτά τα τέσσερα αντικείμενα, μαζί με μια τεράστια διευρυμένη συλλογή παραδειγμάτων μοντέλου, φέρνουν το Gluon / MXNet σε σχεδόν ισοδύναμο επίπεδο με τα Keras / TensorFlow και PyTorch για ευκολία ανάπτυξης και ταχύτητας εκπαίδευσης. Μπορείτε να δείτε παραδείγματα κώδικα Gluon που απεικονίζουν κάθε ένα από αυτά τα χαρακτηριστικά στην κύρια σελίδα Gluon και επαναλαμβάνονται στη σελίδα επισκόπησης για το API Gluon.

Το Gluon API περιλαμβάνει λειτουργικότητα για επίπεδα νευρωνικών δικτύων, επαναλαμβανόμενα νευρωνικά δίκτυα, λειτουργίες απώλειας, μεθόδους συνόλων δεδομένων και σύνολα δεδομένων όρασης, ζωολογικό κήπο μοντέλου και ένα σύνολο πειραματικών μεθόδων νευρωνικού δικτύου. Μπορείτε να συνδυάσετε ελεύθερα το Gluon με τις τυπικές μονάδες MXNet και NumPy — για παράδειγμα, μονάδα μέτρησης, autograd, και ndarray- όπως και με τις ροές ελέγχου Python.

Το Gluon έχει μια καλή επιλογή επιπέδων για οικοδομικά μοντέλα, συμπεριλαμβανομένων των βασικών επιπέδων (Πυκνό, Διακοπή κ.λπ.), συνελικτικά στρώματα, στρώματα συγκέντρωσης και στρώματα ενεργοποίησης. Καθένα από αυτά είναι μια κλήση μίας γραμμής. Αυτά μπορούν να χρησιμοποιηθούν, μεταξύ άλλων θέσεων, μέσα σε κοντέινερ δικτύου όπως gluon.nn.Sequential ().

ΕΝΑ HybridSequential δίκτυο μπορεί να αποθηκευτεί προσωρινά (μετατραπεί σε συμβολικό γράφημα) για υψηλή απόδοση χρησιμοποιώντας το εκτρέφω μικτά γένη ζώων ή φυτών() μέθοδος:

net = nn.HybridSequential ()

με net.name_scope ():

net.add (nn.Dense (256, ενεργοποίηση = "relu"))

net.add (nn.Dense (128, ενεργοποίηση = "relu"))

net.add (nn. Πυκνό (2))

net.hybridize ()

Σημειώστε τον τρόπο με τον οποίο Πυκνός Η μέθοδος επιπέδου μπορεί να πάρει ένα όνομα επιπέδου ενεργοποίησης ως παράμετρο. Αυτή είναι μια από τις πολλές ομοιότητες μεταξύ του Gluon και του Keras.

Ούτε το Ακολουθητικός ούτε το HybridSequential τα κοντέινερ τεκμηριώνονται ως μέρος του Gluon API. Όπως ανακάλυψα αναζητώντας το δέντρο πηγαίου κώδικα, εφαρμόζονται στο incubator-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Τι νέο υπάρχει στο MXNet 1.3;

Το MXNet v1.3 περιλαμβάνει μια μεγάλη λίστα με νέες δυνατότητες, βελτιώσεις και διορθώσεις σφαλμάτων. Τα κυριότερα σημεία περιλαμβάνουν τη δυνατότητα υβριδισμού επιπέδων RNN (επαναλαμβανόμενο νευρωνικό δίκτυο) για απόδοση, νέα και ενημερωμένα προ-εκπαιδευμένα μοντέλα όρασης, εξαγωγή μοντέλων σε μορφή ONNX (Open Neural Network Exchange) και ενσωμάτωση του χρόνου εκτέλεσης του Nvidia TensorRT στο MXNet προκειμένου να επιταχυνθεί το συμπέρασμα . Επιπλέον, η ενσωμάτωση της Intel MKL (Math Kernel Library) στο MXNet προσφέρει έως και 4 φορές βελτίωση της απόδοσης σε επεξεργαστές Intel για εντατικές λειτουργίες, συμπεριλαμβανομένων κόμβων συνέλιξης.

Η κοινότητα του MXNet δίνει επίσης μεγαλύτερη προσοχή στο QA και τη συνεχή ενσωμάτωση. Μεταξύ των μέτρων που λαμβάνονται είναι η ενσωμάτωση των δειγμάτων σημειωματάριων από το σεμινάριο Deep Learning: The Straight Dope στη νυχτερινή δοκιμή CI.

Εγκατάσταση MXNet χωρίς δάκρυα

Εάν έχετε ήδη μια τρέχουσα εγκατάσταση φορητών υπολογιστών Python, MXNet και Jupyter με το Notedown, μπορείτε να μεταβείτε στην επόμενη ενότητα. Διαφορετικά, ακολουθήστε παρακάτω.

Δεν μπορώ να σας πω πόσα προβλήματα είχα με παλαιότερες εκδόσεις των διαφόρων στοιχείων λογισμικού που ρίχνουν ασαφή σφάλματα, καθώς και παρεμβολές από τις εγκαταστάσεις άλλων πακέτων, πριν καταλάβω αυτήν την αναπαραγωγική ακολουθία. Με αυτόν τον τρόπο, δεν πρέπει να συναντήσετε σφάλματα, εκτός από τον δικό σας κώδικα και δεν πρέπει να σπάσετε άλλα πλαίσια μάθησης σε βάθος που ενδέχεται να έχετε εγκαταστήσει.

Είναι η μόνη δυνατή επιλογή εγκατάστασης; Οχι φυσικά όχι. Είναι ακόμα πιο εύκολο να εκτελέσετε το MXNet στο Amazon SageMaker ή να εκτελέσετε ένα Deep Learning AMI στο AWS, το οποίο έχει ήδη εγκαταστήσει όλα όσα χρειάζεστε.

Ξεκινήστε εγκαθιστώντας την τελευταία έκδοση του Python 3 για την πλατφόρμα σας. (Είχα προβλήματα με την εκτέλεση του MXNet με το Python 2 ή παλαιότερες εκδόσεις του Python 3.) Προτείνω να εγκαταστήσετε το Python 3 από το Python.org. Εάν προτιμάτε περιβάλλον Anaconda ή MiniConda, μπορείτε να εγκαταστήσετε το Python 3 με ένα από αυτά και, ενδεχομένως, να παραλείψετε το βήμα εγκατάστασης του Jupyter.

Βεβαιωθείτε ότι μπορείτε να εκτελέσετε python3 από τη γραμμή εντολών και ότι αναφέρει την τελευταία έκδοση. Στην εγκατάστασή μου στα τέλη Οκτωβρίου 2018, python3 -V επιστρέφει Python 3.7.1; η έκδοσή σας μπορεί να είναι αργότερα.

Στη συνέχεια, εγκαταστήστε το Jupyter. Χρησιμοποίησα pip. Αυτό το βήμα δεν είναι απαραίτητο εάν εγκαταστήσατε το Anaconda, το οποίο εγκαθιστά το Jupyter από προεπιλογή.

python3 -m pip εγκατάσταση - αναβάθμιση pip

python3 -m pip εγκαταστήστε jupyter

Εάν τρέχετε σημειωματάριο jupyter από τη γραμμή εντολών θα πρέπει να δείτε ανοιχτό ένα παράθυρο του προγράμματος περιήγησης και να μπορείτε να δημιουργήσετε ένα νέο σημειωματάριο με πυρήνα Python 3. Κλείστε αυτά τα δύο παράθυρα και σταματήστε το διακομιστή φορητών υπολογιστών, συνήθως πατώντας Ctrl-c δύο φορές στη γραμμή εντολών.

Τώρα εγκαταστήστε το Notedown χρησιμοποιώντας ένα tarball όπως περιγράφεται στο πρόγραμμα μαθημάτων Gluon crash Readme. Η προσθήκη Notedown επιτρέπει στον Jupyter να διαβάσει σημειωματάρια που έχουν αποθηκευτεί σε μορφή markdown, το οποίο είναι χρήσιμο τόσο για το πρόγραμμα crash όσο και για το Deep Learning: The Straight Dope.

εγκατάσταση pip //github.com/mli/notedown/tarball/master

Δοκιμάστε τον καπνό εκτελώντας το Jupyter με το Notedown:

σημειωματάριο jupyter --NotebookApp.contents_manager_class = 'noteown.NotedownContentsManager'

Για άλλη μια φορά κλείστε οποιεσδήποτε ιστοσελίδες και σταματήστε το διακομιστή φορητών υπολογιστών.

Τώρα είμαστε έτοιμοι να δημιουργήσουμε ένα εικονικό περιβάλλον για το MXNet. Εάν είστε χρήστης του Anaconda, μπορείτε αντ 'αυτού να δημιουργήσετε το εικονικό περιβάλλον με το conda. Χρησιμοποίησα τη μητρική εγκατάσταση Python3 venv, ξεκινώντας από τον αρχικό κατάλογο:

python3 -m venv envs / mxnet

Τώρα ενεργοποιήστε το εικονικό περιβάλλον και εγκαταστήστε το MXNet για την πλατφόρμα σας. Επέλεξα την έκδοση MXNet με MKL (βιβλιοθήκη υψηλής απόδοσης της Intel για τους επεξεργαστές της), καθώς είμαι σε Mac (για την οποία δεν υπάρχει δυαδικό MXNet για CUDA GPU), αλλά αν έχετε εγκαταστήσει πρόσφατα GPU Nvidia με CUDA σε Linux ή Windows, θα μπορούσατε να εγκαταστήσετε μια έκδοση MXNet με υποστήριξη CUDA και MKL. Σε ένα κέλυφος Bash, η εγκατάσταση του MXNet στο εικονικό περιβάλλον είχε ως εξής:

πηγή envs / mxnet / bin / activate

εγκατάσταση pip mxnet-mkl

Η ενεργοποίηση είναι ελαφρώς διαφορετική στο κέλυφος C και στο κέλυφος ψαριού, καθώς μπορείτε να εκτελέσετε το σενάριο ενεργοποίησης απευθείας αντί να το χρησιμοποιήσετε πηγή. Σε κάθε περίπτωση, θα πρέπει να ενεργοποιήσετε το περιβάλλον όποτε θέλετε να επιστρέψετε σε αυτήν την εγκατάσταση MXNet μετά το κλείσιμο του κελύφους. Εάν δεν βρίσκεστε στον αρχικό σας κατάλογο, η εντολή ενεργοποίησης Bash θα ήταν:

πηγή ~ / envs / mxnet / bin / activate

Δοκιμάστε την εγκατάσταση του MXNet στη γραμμή εντολών εκτελώντας το Python 3 και εισάγοντας τη βιβλιοθήκη MXNet που μόλις εγκαταστήσαμε. Σημειώστε ότι το (mxnet) Το πρόθεμα στη γραμμή εντολών σημαίνει ότι βρισκόμαστε στο εικονικό περιβάλλον.

(mxnet) Martins-Retina-MacBook: ~ martinheller $ python3

Python 3.7.1 (v3.7.1: 260ec2c36a, 20 Οκτ 2018, 03:13:28)

[Clang 6.0 (clang-600.0.57)] στο darwin

Πληκτρολογήστε "βοήθεια", "πνευματικά δικαιώματα", "πιστώσεις" ή "άδεια" για περισσότερες πληροφορίες.

>>> εισαγωγή mxnet ως mx

>>> από mxnet import nd

>>> nd.array (((1,2,3), (5,6,7)))

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ Δ

(mxnet) Martins-Retina-MacBook: ~ martinheller $

Τώρα, είμαστε έτοιμοι να δοκιμάσουμε το MXNet σε ένα σημειωματάριο Jupyter με το Notedown, στο εικονικό περιβάλλον όπου εγκαταστήσαμε το MXNet:

Τώρα που δοκιμάσατε την εγκατάσταση του MXNet σε φορητό υπολογιστή Jupyter, μπορείτε να κάνετε το επόμενο βήμα και να δοκιμάσετε το Gluon πληρέστερα. Περιηγηθείτε στο repo gluon-api / gluon-api στο GitHub και κατεβάστε το σημειωματάριο Jupyter του δείγματος κώδικα. Μεταβείτε στον κατάλογο στον οποίο πραγματοποιήσατε λήψη του σημειωματάριου, ενεργοποιήστε το εικονικό περιβάλλον MXNet εάν είναι απαραίτητο, εκτελέστε το σημειωματάριο Jupyter, ανοίξτε το δείγμα και εκτελέστε το. Μπορεί να χρειαστεί λίγος χρόνος για να ολοκληρωθεί η εκπαίδευση. Εάν όλα είναι καλά, θα δείτε κάτι σαν το εξής:

Σεμινάρια Gluon και MXNet Module

Το MXNet έχει τώρα έναν αριθμό μαθημάτων τόσο για το Gluon όσο και για το Module API. Έχω ήδη αναφέρει το μακρύ μάθημα για τη βαθιά μάθηση με το Gluon, το Deep Learning: The Straight Dope και τη σύντομη έκδοση, το 60-Minute Gluon Crash Course.

Επιπλέον, υπάρχουν περίπου 30 μαθήματα Gluon για το Python. Από την πλευρά του Module API, υπάρχουν περίπου 24 μαθήματα για το Python, πέντε για το Scala, δύο για το C ++, εννέα για το R και τέσσερα για το Perl.

Όταν αναθεώρησα τον Keras τον Σεπτέμβριο του τρέχοντος έτους, είπα ότι «Αν ξεκινούσα ένα νέο πρόγραμμα βαθιάς μάθησης σήμερα, πιθανότατα θα έκανα την έρευνα με τον Keras. Δεν είμαι πλέον τόσο σίγουρος για αυτό. Το Gluon / MXNet είναι σχεδόν τόσο καλή επιλογή όσο το Keras / TensorFlow για έρευνα σε βάθος για τις CPU και τις GPU.

Στην κάτω πλευρά, το MXNet δεν διαθέτει υποστήριξη για TPUs ή FPGAs, σε αντίθεση με το TensorFlow και στερείται ισοδύναμου του TensorFlow's TensorBoard για οπτικοποίηση γραφημάτων. Επιπλέον, το Keras / TensorFlow έχει μεγαλύτερο οικοσύστημα από το Gluon / MXNet.

Το Keras μπορεί να αναπτυχθεί σε περισσότερα περιβάλλοντα από το Gluon, αλλά εσείς μπορώ αναπτύξτε μοντέλα Gluon για πρόβλεψη σε συσκευές Android, iOS, Raspberry Pi και Nvidia Jetson, εκτός από υπολογιστές που μπορούν να εκπαιδεύσουν τα μοντέλα και στο TensorRT. Οι Gluon και Keras είναι και οι δύο πιο ώριμοι σήμερα από το PyTorch, το οποίο βρίσκεται ακόμα σε κατάσταση beta. Οι PyTorch και Gluon μπορούν και οι δύο να δημιουργήσουν μοντέλα δυναμικά. Η Κερά δεν μπορεί προς το παρόν.

Τελικά, η επιλογή του πλαισίου βαθιάς μάθησης που θα χρησιμοποιηθεί μπορεί να περιστρέφεται γύρω από τις συγκεκριμένες απαιτήσεις σας - ή ό, τι γνωρίζετε και σας αρέσει. Αλλά χάρη στο Gluon και άλλες δραματικές βελτιώσεις (στην τεκμηρίωση, σεμινάρια, μοντέλα κ.λπ.), το MXNet διαμορφώνεται για να είναι τόσο καλή επιλογή όσο το TensorFlow ή το PyTorch για βαθιά μάθηση.

$config[zx-auto] not found$config[zx-overlay] not found