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

Πώς να χρησιμοποιήσετε το TensorFlow στο πρόγραμμα περιήγησής σας

Ενώ μπορείτε να εκπαιδεύσετε απλά νευρωνικά δίκτυα με σχετικά μικρές ποσότητες εκπαιδευτικών δεδομένων με το TensorFlow, για βαθιά νευρωνικά δίκτυα με μεγάλα σύνολα δεδομένων εκπαίδευσης, πρέπει πραγματικά να χρησιμοποιήσετε GPU Nvidia με δυνατότητα CUDA ή Google TPU ή FPGA για επιτάχυνση. Η εναλλακτική λύση ήταν, μέχρι πρόσφατα, να εκπαιδεύεται σε ομάδες CPU για εβδομάδες.

Μία από τις καινοτομίες που εισήχθησαν με το TensorFlow 2.0 είναι μια εφαρμογή JavaScript, TensorFlow.js. Δεν θα περίμενα αυτό να βελτιώσει την ταχύτητα εκπαίδευσης ή συμπερασμάτων, αλλά αυτό, δεδομένης της υποστήριξής του για όλες τις GPU (όχι μόνο GPU με δυνατότητα CUDA) μέσω του WebGL API.

[Επίσης στο: TensorFlow 2.0 κριτική: Ευκολότερη μηχανική εκμάθηση]

Τι είναι το TensorFlow.js;

Το TensorFlow.js είναι μια βιβλιοθήκη για την ανάπτυξη και την κατάρτιση μοντέλων μηχανικής εκμάθησης σε JavaScript και την ανάπτυξή τους σε πρόγραμμα περιήγησης ή στο Node.js. Μπορείτε να χρησιμοποιήσετε τα υπάρχοντα μοντέλα, να μετατρέψετε τα μοντέλα Python TensorFlow, να χρησιμοποιήσετε την εκμάθηση μεταφοράς για να επανακαθορίσετε υπάρχοντα μοντέλα με τα δικά σας δεδομένα και να αναπτύξετε μοντέλα από το μηδέν.

TensorFlow.js πίσω άκρα

Το TensorFlow.js υποστηρίζει πολλαπλά back end για εκτέλεση, αν και μόνο ένα μπορεί να είναι ενεργό κάθε φορά. Το περιβάλλον TensorFlow.js Node.js υποστηρίζει τη χρήση ενός εγκατεστημένου build του Python / C TensorFlow ως back end, το οποίο με τη σειρά του μπορεί να χρησιμοποιήσει τη διαθέσιμη επιτάχυνση υλικού του μηχανήματος, για παράδειγμα CUDA. Υπάρχει επίσης ένα back-end που βασίζεται σε JavaScript για το Node.js, αλλά οι δυνατότητές του είναι περιορισμένες.

Στο πρόγραμμα περιήγησης, το TensorFlow.js έχει πολλά πλεονεκτήματα με διαφορετικά χαρακτηριστικά. Το WebGL back end παρέχει υποστήριξη GPU χρησιμοποιώντας υφές WebGL για αποθήκευση και shaders WebGL για εκτέλεση και μπορεί να είναι έως και 100x γρηγορότερα από το απλό back-end CPU. Το WebGL δεν απαιτεί CUDA, οπότε μπορεί να εκμεταλλευτεί ό, τι υπάρχει GPU.

Το back-end του WebAssembly (WASM) TensorFlow.js για το πρόγραμμα περιήγησης χρησιμοποιεί τη βιβλιοθήκη XNNPACK για βελτιστοποιημένη εφαρμογή CPU των χειριστών νευρωνικών δικτύων. Το WASM back end είναι γενικά πολύ πιο γρήγορο (10x έως 30x) από το JavaScript CPU back end, αλλά είναι συνήθως πιο αργό από το WebGL back end εκτός από πολύ μικρά μοντέλα. Η χιλιομετρική σας απόσταση μπορεί να διαφέρει, οπότε δοκιμάστε τόσο τα WASM όσο και τα WebGL back end για τα δικά σας μοντέλα στο δικό σας υλικό.

TensorFlow.js μοντέλα και επίπεδα

Το TensorFlow.js υποστηρίζει δύο API για τη δημιουργία μοντέλων νευρωνικών δικτύων. Το ένα είναι το Layers API, το οποίο ουσιαστικά είναι το ίδιο με το Keras API στο TensorFlow 2. Το άλλο είναι το Core API, το οποίο είναι ουσιαστικά άμεσος χειρισμός των τανυστών.

Όπως και ο Keras, το TensorFlow.js Layers API έχει δύο τρόπους για να δημιουργήσει ένα μοντέλο: διαδοχικό και λειτουργικό. Το διαδοχικό API είναι μια γραμμική στοίβα επιπέδων, που εφαρμόζεται με μια λίστα επιπέδων (όπως φαίνεται παρακάτω) ή με το model.add () μέθοδος:

const model = tf. συνέχεια ({

στρώματα: [

tf.layers.dense ({inputShape: [784], μονάδες: 32, ενεργοποίηση: 'relu'}),

tf.layers.dense ({μονάδες: 10, ενεργοποίηση: 'softmax'}),

 ]

});

Το λειτουργικό API χρησιμοποιεί το tf.model () API και μπορεί να δημιουργήσει αυθαίρετα δίκτυα DAG (κατευθυνόμενο ακυκλικό γράφημα):

// Δημιουργήστε ένα αυθαίρετο γράφημα επιπέδων, συνδέοντάς τα

// μέσω της μεθόδου apply ().

const input = tf.input ({σχήμα: [784]});

const dense1 = tf.layers.dense ({μονάδες: 32, ενεργοποίηση: 'relu'}). εφαρμόζεται (είσοδος);

const dense2 = tf.layers.dense ({μονάδες: 10, ενεργοποίηση: 'softmax'}). εφαρμόζεται (dense1);

const model = tf.model ({inputs: input, outputs: dense2});

Το Core API μπορεί να επιτύχει τους ίδιους στόχους, με διαφορετικό κώδικα και λιγότερο από μια διαισθητική σύνδεση με τα επίπεδα. Το παρακάτω μοντέλο μπορεί να μοιάζει με βασικές λειτουργίες τανυστή, αλλά δημιουργεί το ίδιο δίκτυο με τις δύο προηγούμενες διατυπώσεις. Σημειώστε τη χρήση του relu () και softmax (), οι οποίες είναι και οι δύο λειτουργίες νευρωνικού δικτύου, στο μοντέλο() λειτουργία παρακάτω.

// Τα βάρη και οι προκαταλήψεις για τα δύο πυκνά επίπεδα.

const w1 = tf.variable (tf.randomNormal ([784, 32]));

const b1 = tf.variable (tf.randomNormal ([32]));

const w2 = tf.variable (tf.randomNormal ([32, 10]));

const b2 = tf.variable (tf.randomNormal ([10]));

μοντέλο λειτουργίας (x) {

επιστροφή x.matMul (w1) .add (b1) .relu (). matMul (w2) .add (b2) .softmax ();

}

Προκατασκευασμένα μοντέλα TensorFlow.js

Υπάρχουν πάνω από δώδεκα προ-ενσωματωμένα μοντέλα TensorFlow.js τεκμηριωμένα, διαθέσιμα στο αποθετήριο και φιλοξενούνται στο NPM (για χρήση στο Node.js) και unkg (για χρήση σε πρόγραμμα περιήγησης). Μπορείτε να χρησιμοποιήσετε αυτά τα μοντέλα όπως παρέχονται ή για μεταφορά μάθησης. Με λίγη δουλειά, μπορείτε επίσης να τα χρησιμοποιήσετε ως δομικά στοιχεία για άλλα μοντέλα.

Πολλά από αυτά τα μοντέλα χρησιμοποιούν την κάμερα μιας συσκευής σε πραγματικό χρόνο, για παράδειγμα:

Η παρακάτω λίστα είναι ένας βολικός δείκτης στα περισσότερα από τα προσυσκευασμένα μοντέλα TensorFlow.js.

  • Ταξινόμηση εικόνας
  • Ανίχνευση αντικειμένων
  • Τμηματοποίηση σώματος
  • Θέστε εκτίμηση
  • Ανίχνευση τοξικότητας κειμένου
  • Κωδικοποιητής καθολικής πρότασης
  • Αναγνώριση εντολών ομιλίας
  • Ο ταξινομητής KNN
  • Απλή ανίχνευση προσώπου
  • Σημασιολογική κατάτμηση
  • Ανίχνευση ορόσημου προσώπου
  • Ανίχνευση στάσης χεριών
  • Απάντηση ερωτήσεων στη φυσική γλώσσα

Τι είναι το ml5.js;

Το ml5.js είναι μια ανοιχτή πηγή, φιλική διεπαφή υψηλού επιπέδου με το TensorFlow.js που αναπτύχθηκε κυρίως στο NYU. Το ml5.js παρέχει άμεση πρόσβαση στο πρόγραμμα περιήγησης σε προ-εκπαιδευμένα μοντέλα για την ανίχνευση ανθρώπινων πόζων, τη δημιουργία κειμένου, το στυλ μιας εικόνας με μια άλλη, τη σύνθεση μουσικής, την ανίχνευση βήματος, τις συνηθισμένες σχέσεις λέξεων στην αγγλική γλώσσα και πολλά άλλα. Ενώ το TensorFlow.js απευθύνεται κυρίως σε επιστήμονες και προγραμματιστές δεδομένων, το ml5.js στοχεύει στην υποστήριξη της ευρύτερης δημόσιας κατανόησης της μηχανικής μάθησης και στην ενίσχυση της βαθύτερης εμπλοκής με τον ηθικό υπολογισμό, την υπεύθυνη συλλογή δεδομένων και την προσβασιμότητα και την ποικιλομορφία των ανθρώπων και των προοπτικών στην τεχνολογία και τις τέχνες .

Τα περισσότερα από τα παραδείγματα στο ml5.js εξαρτώνται από τα μοντέλα TensorFlow.js. Έχουν συσκευαστεί ως ιστοσελίδες που μπορείτε να εκτελέσετε ως έχουν ή να επεξεργαστείτε, για παράδειγμα για να χρησιμοποιήσετε διαφορετικές εικόνες.

Επίδειξη: Ταξινόμηση Iris με TensorFlow.js

Το διάσημο σύνολο δεδομένων διάκρισης της Iris, προήλθε από τον R.A. Ο Fisher το 1936 για την απεικόνιση της γραμμικής ανάλυσης διακρίσεων, εξακολουθεί να χρησιμοποιείται ως δοκιμαστική περίπτωση για μεθόδους ταξινόμησης στατιστικής και μηχανικής μάθησης. Χρησιμοποιεί τέσσερα χαρακτηριστικά, το μήκος και το πλάτος των σέπαλων και των πετάλων, για να ταξινομήσει τρία είδη ίριδας, με 50 δείγματα κάθε είδους. (Το πρωτότυπο έγγραφο του Fisher δημοσιεύθηκε στο Χρονικά της ευγενικής, που λέει περισσότερα για την επιστήμη το 1936 από ό, τι για τα δεδομένα ή τις στατιστικές.)

Εάν εκτελέσετε ανάλυση συμπλέγματος σε αυτά τα δεδομένα, δύο από τα είδη θα μοιραστούν ένα σύμπλεγμα, με το τρίτο (I. Setosa) σε ξεχωριστό σύμπλεγμα. Από την άλλη πλευρά, η ανάλυση βασικών συστατικών μπορεί να διαχωρίσει και τα τρία είδη αρκετά καλά.

Το δείγμα TensorFlow.js ταιριάζει με τα δεδομένα της Iris με δύο πλήρως συνδεδεμένα (πυκνά) επίπεδα νευρωνικού δικτύου, όπως φαίνεται στο παρακάτω απόσπασμα κώδικα.

// Ορίστε την τοπολογία του μοντέλου: δύο πυκνά στρώματα.

const model = tf. μεταγενέστερο ();

μοντέλο.add (tf.layers.dense (

{μονάδες: 10, ενεργοποίηση: 'sigmoid', inputShape: [xTrain.shape [1]]}

));

model.add (tf.layers.dense ({μονάδες: 3, ενεργοποίηση: 'softmax'}));

model.summary ();

const optimizer = tf.train.adam (params.learningRate);

model.compile ({

optimizer: optimizer,

απώλεια: "ategoricalCrossentropy ",

μετρήσεις: ['ακρίβεια'],

});

Όπως μπορείτε να δείτε στο παρακάτω στιγμιότυπο οθόνης, αυτό το μοντέλο κάνει αξιοπρεπή δουλειά για την ταξινόμηση των τριών ειδών. Αν παίζετε με τις παραμέτρους, ωστόσο, θα ανακαλύψετε ότι εμφανίζεται κάποια σύγχυση μεταξύ δύο από τα είδη (αυτά στο ίδιο σύμπλεγμα) εάν επαναλάβετε για περισσότερες από 40 εποχές.

Μετατροπή μοντέλων Python TensorFlow σε JavaScript

Μέρος του αποθετηρίου TensorFlow.js περιέχει έναν μετατροπέα για αποθηκευμένα μοντέλα TensorFlow και Keras. Υποστηρίζει τρεις μορφές: SavedModel (η προεπιλογή για TensorFlow), HDF5 (η προεπιλογή για Keras) και TensorFlow Hub. Μπορείτε να χρησιμοποιήσετε τον μετατροπέα για αποθηκευμένα μοντέλα από τα τυπικά αποθετήρια, τα μοντέλα που έχετε εκπαιδευτεί και τα μοντέλα που έχετε βρει αλλού.

Υπάρχουν πραγματικά δύο βήματα για τη μετατροπή. Το πρώτο βήμα είναι να μετατρέψετε το υπάρχον μοντέλο σε αρχεία model.json και binary. Το δεύτερο βήμα είναι να χρησιμοποιήσετε ένα API για να φορτώσετε το μοντέλο σε TensorFlow.js tf.loadGraphModel για μοντέλα TensorFlow και TensorFlow Hub που έχουν μετατραπεί, ή tf.loadLayersModel για μοντέλα Keras που έχουν μετατραπεί.

Χρησιμοποιώντας τη μάθηση μεταφοράς

Το TensorFlow.js υποστηρίζει τη μεταφορά μάθησης ουσιαστικά με τον ίδιο τρόπο όπως το TensorFlow. Η τεκμηρίωση παρέχει παραδείγματα για την προσαρμογή του MobileNet για τις δικές σας εικόνες και την προσαρμογή ενός μοντέλου αναγνώρισης εντολών ομιλίας για τις δικές σας κατηγορίες ήχου. Ουσιαστικά, αυτό που κάνετε σε κάθε ένα από αυτά τα codelab είναι να προσθέσετε έναν μικρό προσαρμοσμένο ταξινομητή πάνω από το εκπαιδευμένο μοντέλο και να το εκπαιδεύσετε.

Συνολικά, το TensorFlow.js μπορεί να κάνει σχεδόν οτιδήποτε μπορεί να κάνει το TensorFlow. Ωστόσο, δεδομένου ότι τα περιβάλλοντα προορισμού για το TensorFlow.js (GPU ποικιλίας κήπου για παιχνίδια) έχουν συνήθως λιγότερα μέσα στη μνήμη GPU από τα μεγάλα GPU διακομιστή Nvidia που χρησιμοποιούνται συνήθως για εκπαίδευση βαθιάς μάθησης TensorFlow, ίσως χρειαστεί να μειώσετε το μέγεθος του μοντέλο για να το εκτελεί σε πρόγραμμα περιήγησης. Το βοηθητικό πρόγραμμα μετατροπής κάνει μερικά από αυτά για εσάς, αλλά ίσως χρειαστεί να αφαιρέσετε τα επίπεδα χειροκίνητα και να μειώσετε τα μεγέθη παρτίδας για την προπόνησή σας.

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