Πώς να ξεκινήσετε τον εντοπισμό σφαλμάτων TensorFlow

Πίνακας περιεχομένων

  • Σε τι αφορά
  • Η βάση κωδικού αναφοράς
  • 1. Λήψη και εκτύπωση τιμών στο Session.run
  • 2. Χρησιμοποιήστε τη λειτουργία tf.Print
  • 3. Χρησιμοποιήστε την οπτικοποίηση Tensorboard για παρακολούθηση
  • α) καθαρίστε το γράφημα με κατάλληλα ονόματα και εύρη ονομάτων
  • β) Προσθήκη περιλήψεων
  • c) Προσθέστε ένα tf.summary.FileWriter για να δημιουργήσετε αρχεία καταγραφής
  • δ) Ξεκινήστε τον διακομιστή tensorboard από το τερματικό σας
  • 4. Χρησιμοποιήστε το πρόγραμμα εντοπισμού σφαλμάτων Tensorboard
  • 5. Χρησιμοποιήστε το πρόγραμμα εντοπισμού σφαλμάτων TensorFlow
  • συμπέρασμα

Σε τι αφορά

Ο εντοπισμός σφαλμάτων είναι διπλάσιος από το γράψιμο του κώδικα στην πρώτη θέση. Επομένως, εάν γράψετε τον κώδικα όσο το δυνατόν πιο έξυπνα, εξ ορισμού δεν είστε αρκετά έξυπνοι για να τον εντοπίσετε. - BRIAN W. KERNIGHAN

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

Όσον αφορά το TensorFlow, ωστόσο, προκύπτουν ορισμένες νέες προκλήσεις λόγω του τρόπου λειτουργίας του.

Όπως αναφέρει η επίσημη τεκμηρίωση:

Ένα πρόγραμμα TensorFlow Core αποτελείται από δύο διακριτές ενότητες:

  1. Δημιουργία του υπολογιστικού γραφήματος (af.Graph).
  2. Εκτέλεση του υπολογιστικού γραφήματος (χρησιμοποιώντας ένα tf.Session).

Ο πραγματικός υπολογισμός γίνεται session.run(), πράγμα που σημαίνει ότι πρέπει να βρούμε έναν τρόπο για να ελέγξουμε τιμές μέσα σε αυτήν τη συνάρτηση.

Η βάση κωδικού αναφοράς

Ως αναφορά, θα παράσχω στον αποθετήριο Github τον αντίστοιχο κωδικό εδώ.

Θα χρησιμοποιήσουμε ένα βασικό νευρωνικό δίκτυο για να ταξινομήσουμε χειρόγραφα ψηφία από το σύνολο δεδομένων MNIST, χρησιμοποιώντας:

  • tf.nn.softmax_cross_entropy_with_logits_v2 ως λειτουργία ταξινόμησης TF για τον ορισμό της απώλειας
  • tf.train.GradientDescentOptimizer για την ελαχιστοποίηση της απώλειας

Η εκτέλεση αυτού του μικρού νευρωνικού δικτύου δείχνει ότι μπορεί ήδη να επιτύχει ακρίβεια ~ 92%:

Η διαδικασία εντοπισμού σφαλμάτων

Τώρα για τον εντοπισμό σφαλμάτων, υπάρχουν βασικά 5 (ρεαλιστικοί) τρόποι για να επιτευχθεί αυτό.

Ως δευτερεύουσα σημείωση: Είναι συχνά χρήσιμο να υποστηρίζετε σχήματα για να διασφαλίζετε ότι όλα λειτουργούν μαζί όπως προορίζεται.

1. Λήψη και εκτύπωση τιμών στο Session.run

Αυτός είναι πιθανώς ο πιο γρήγορος και ευκολότερος τρόπος για να λάβετε τις πληροφορίες που χρειάζεστε.

  • εύκολο και γρήγορο
  • οποιαδήποτε αξιολόγηση μπορεί να ληφθεί από παντού
  • είναι απαραίτητο να διατηρήσετε την αναφορά στον τανυστή, ο οποίος είναι κακός σε πολύπλοκα μοντέλα

Στην ουσία, εκτελείτε την περίοδο λειτουργίας σε μια έντυπη δήλωση και την τροφοδοτείτε με το λεξικό, έτσι: print( f"The bias parameter is: {sess.run(b, feed_dict={x: mnist.test.images, y_: mnist.test.labels})}" )

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

Επιπλέον, μην ξεχνάτε τη .eval()μέθοδο αξιολόγησης των τανυστών ειδικά.

Δείτε τον πλήρη κωδικό εδώ στο Github.

2. Χρησιμοποιήστε τη λειτουργία tf.Print

Η μέθοδος tf.Print είναι χρήσιμη κατά την αξιολόγηση χρόνου εκτέλεσης όταν δεν θέλουμε να ανακτήσουμε ρητά τον κώδικα με το session.run (). Είναι μια ταυτότητα που εκτυπώνει δεδομένα κατά την αξιολόγηση.

  • μας επιτρέπει να δούμε την εξέλιξη των τιμών κατά την αξιολόγηση
  • Έχει περιορισμένη διαμόρφωση και επομένως μπορεί εύκολα να φράξει το τερματικό

Ο Yufeng G δημιούργησε ένα φανταστικό βίντεο και άρθρο σχετικά με τον τρόπο χρήσης της δήλωσης tf.Print. Και όπως τονίζει, είναι ζωτικής σημασίας να δομηθεί ο κόμβος εκτύπωσης με τον τρόπο που χρησιμοποιείται περαιτέρω. Όπως λέει:

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

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

Με την αξιολόγηση χρόνου εκτέλεσης έρχεται η δυνατότητα διεκπεραίωσης χρόνου εκτέλεσης tf.Assert.

Δείτε τον πλήρη κωδικό εδώ.

3. Χρησιμοποιήστε την οπτικοποίηση Tensorboard για παρακολούθηση

Πριν μπείτε σε αυτήν τη μέθοδο εντοπισμού σφαλμάτων, λάβετε υπόψη ότι υπάρχει ο εντοπιστής σφαλμάτων Tensorboard και Tensorboard!

Ο ιστότοπος TF προσφέρει ένα εξαιρετικό σεμινάριο για την εφαρμογή και τη χρήση του πίνακα.

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

a) Clean the graph with proper names and name scopes

First we need to organize all the variables and operations with the scope methods that TF provides.

with tf.name_scope("variables_scope"): x = tf.placeholder(tf.float32, shape=[None, 784], name="x_placeholder") y_ = tf.placeholder(tf.float32, shape=[None, 10], name="y_placeholder")

b) Add tf.summaries

For example:

with tf.name_scope("weights_scope"): W = tf.Variable(tf.zeros([784, 10]), name="weights_variable") tf.summary.histogram("weight_histogram", W)

c) Add a tf.summary.FileWriter to create log files

Tip: Make sure to create sub folders for each log to avoid accumulation of graphs.

d) Start the tensorboard server from your terminal

For example: tensorboard --logdir=./tfb_logs/ --port=8090 --host=127.0.0.1

Navigating to the tensorboard server (in this case //127.0.0.1:8090) shows the following:

Now the full power and use of tensorboard becomes clear. It allows you very easily to spot errors in your machine learning model. My code example is a very simple one. Imagine a model with multiple layers and more variables and operations!

See full code here on Github.

4. Use the Tensorboard debugger

As the Tensorboard Github repository states:

This dashboard is in its alpha release. Some features are not yet fully functional.

However, it can still be used and provides cool debugging features. Please check out the Github repository to get an adequate overview. Also, see their video to get a deeper understanding. They have done a great job.

To accomplish this, there are 3 things to add to our previous example:

  1. Import from tensorflow.python import debug as tf_debug
  2. Add your session with tf_debug.TensorBoardDebugWrapsperSession
  3. Add to your tensorboard server the debugger_port

Now you have the option to debug the whole visualized model like with any other debugger, but with a beautiful map. You are able to select certain nodes and inspect them, control execution with the “step” and “continue” buttons, and visualize tensors and their values.

There is much more to talk about regarding this unique feature of Tensorflow, but I will probably dedicate another article to that.

See my full code here on Github.

5. Use the TensorFlow debugger

The last method, but also very powerful, is the CLI TensorFlow debugger.

This debugger focuses on the command-line interface (CLI) of tfdbg, as opposed to the graphical user interface (GUI) of tfdbg, that is the TensorBoard Debugger Plugin.

You simply wrap the session with tf_debug.LocalCLIDebugWrapperSession(sess) and then you start the debugging with executing the file (maybe it's necessary to add the --debug flag).

It basically allows you to run and step through the execution of your model, while providing evaluation metrics.

I think the official documention could be improved, but they have also created a video which introduces the feature in a good way.

So the key features here are the commands invoke_stepper and then pressing s to step through each operation. It is the basic debugger functionality of a debugger but in the CLI. It looks like this:

See the full code here on Github.

Conclusion

As shown, there are many ways to debug a TensorFlow application. Each method has its own strengths and weaknesses. I didn’t mention the Python debugger, because it is not TensorFlow specific, but keep in mind that the simple Python debugger already provides some good insights!

There is a great presentation by Wookayin who talks about these concepts as well but also goes over some general debugging advise. That advice is:

  • name tensors properly
  • check and sanitize input
  • logging
  • assertions
  • proper use of exceptions
  • failing fast -> immediately abort if something is wrong
  • don’t repeat yourself
  • οργανώστε τις ενότητες και τον κωδικό σας

Είμαι πραγματικά ενθουσιασμένος για όλα τα χαρακτηριστικά που προσφέρει το TensorFlow για άτομα που κατασκευάζουν συστήματα μηχανικής μάθησης. Κάνουν εξαιρετική δουλειά! Ανυπομονώ για περαιτέρω εξελίξεις! :)

Ευχαριστώ που διαβάσατε το άρθρο μου! Μη διστάσετε να αφήσετε σχόλια!

Ο Ντάνιελ είναι LL.M. φοιτητής στο επιχειρησιακό δίκαιο, εργαζόμενος ως μηχανικός λογισμικού και διοργανωτής τεχνολογικών εκδηλώσεων στη Βιέννη. Οι τρέχουσες προσωπικές του προσπάθειες μάθησης επικεντρώνονται στη μηχανική μάθηση.

Συνδεθείτε:

  • LinkedIn
  • Github
  • Μεσαίο
  • Κελάδημα
  • Steemit
  • Hashnode