Hogyan kezdjük el a TensorFlow hibakeresését

Tartalomjegyzék

  • Miről van szó
  • A referencia kód alapja
  • 1. Az Session.run fájlban töltse le és nyomtassa ki az értékeket
  • 2. Használja a tf.Print műveletet
  • 3. Használja a Tensorboard vizualizációt a monitorozáshoz
  • a) tisztítsa meg a grafikont tulajdonnevekkel és névkörökkel
  • b) Adja hozzá a tf.összefoglalókat
  • c) Naplófájlok létrehozásához adjon hozzá egy tf.summary.FileWriter fájlt
  • d) Indítsa el a tenzorboard szervert a terminálról
  • 4. Használja a Tensorboard hibakeresőt
  • 5. Használja a TensorFlow hibakeresőt
  • Következtetés

Miről van szó

A hibakeresés kétszer olyan nehéz, mint a kód megírása. Ezért, ha a kódot a lehető legokosabban írja, definíció szerint nem vagy elég okos a hibakereséshez. - BRIAN W. KERNIGHAN

A hibakeresés általában unalmas és kihívást jelentő feladat lehet. Mindazonáltal kényelmesen kell átnéznie az írott kódot és azonosítania a problémákat. Általában sok útmutató van, és a hibakeresés folyamata sok nyelv és keretrendszer esetében gyakran jól dokumentált.

Ami a TensorFlow-t illeti, néhány új kihívás merül fel a működése miatt.

Amint a hivatalos dokumentáció kimondja:

A TensorFlow Core program két különálló részből áll:

  1. A számítási grafikon felépítése (a tf.Graph).
  2. A számítási grafikon futtatása (tf.Session használatával).

A tényleges számítást ezzel végezzük session.run(), ami azt jelenti, hogy meg kell találnunk a módszert az értékek ellenőrzésére ebben a függvényben.

A referencia kód alapja

Hivatkozásként itt fogom megadni a Github-adattáramnak a megfelelő kódot.

Alapvető neurális hálózatot fogunk használni az MNIST adatkészletből a kézírásos számjegyek osztályozásához, a következők segítségével:

  • tf.nn.softmax_cross_entropy_with_logits_v2 mint a TF osztályozási művelet a veszteség meghatározására
  • tf.train.GradientDescentOptimizer a veszteség minimalizálása érdekében

Ennek a kis neurális hálózatnak a működtetése azt mutatja, hogy már ~ 92% -os pontosságot képes elérni:

A hibakeresés folyamata

A hibakereséshez alapvetően 5 (pragmatikus) módszer létezik ennek elérésére.

Mellékképként: Gyakran hasznos formákat állítani, hogy minden rendben működjön együtt.

1. Az Session.run fájlban töltse le és nyomtassa ki az értékeket

Valószínűleg ez a leggyorsabb és legegyszerűbb módja a szükséges információk megszerzésének.

  • könnyű és gyors
  • bármilyen értékelés beolvasható mindenhonnan
  • meg kell tartani a tenzorra való hivatkozást, ami komplex modellekben rossz

Lényegében a munkamenetet nyomtatott utasításban futtatja, és betáplálja a szótárba, így: print( f"The bias parameter is: {sess.run(b, feed_dict={x: mnist.test.images, y_: mnist.test.labels})}" )

Ha a kód bonyolultabbá válik, akkor a munkamenet részleges_futtatása használható. De mivel ez egy kísérleti szolgáltatás, ezt nem fogom bemutatás céljából megvalósítani.

Ezenkívül ne felejtsük el a .eval()tenzorok konkrét értékelésének módszerét.

A teljes kódot itt találja a Githubon.

2. Használja a tf.Print műveletet

A tf.Print módszer jól jön a futásidejű kiértékelés során, amikor nem akarjuk a session.run () segítségével kifejezetten beolvasni a kódot. Ez egy identitás op, amely kiírja az adatokat az értékelés során.

  • lehetővé teszi számunkra, hogy az értékelés során az értékek alakulását láthassuk
  • korlátozott konfigurációjú, ezért könnyen eltömítheti a terminált

A Yufeng G fantasztikus videót és cikket készített a tf.Print utasítás használatáról. És amint rámutat, létfontosságú a nyomtatási csomópont strukturálása a további felhasználás módja szerint. Ahogy mondja:

Létfontosságú, hogy valóban ezt a visszaküldött csomópontot használja, mert ha nem, akkor lóg.

A kódomba hozzáadtam egy nyomtatott utasítást, amely lekéri az értékeket a munkameneten belül, hogy szemléltesse, hogy mindkét módszer hogyan teljesít másképp a végrehajtás során.

A futásidejű értékeléssel együtt jár a futásidejű érvényesítés lehetősége is tf.Assert.

A teljes kódot itt tekintheti meg.

3. Használja a Tensorboard vizualizációt a monitorozáshoz

Mielőtt belevágna ebbe a hibakeresési módszerbe, vegye figyelembe, hogy létezik a Tensorboard és a Tensorboard hibakereső!

A TF webhely nagyszerű oktatóanyagot kínál a tábla megvalósításához és használatához.

A felhasználás kulcsa az adatok sorosítása. A TensorFlow biztosítja az összefoglaló műveleteket, amelyek lehetővé teszik a modellről sűrített információk exportálását. Olyanok, mint a horgonyok, amelyek megmondják a megjelenítő táblának, mit tervezzenek.

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
  • organize your modules and code

I am really excited for all the features that TensorFlow has to offer for people who are building machine learning systems. They are doing a great job! Looking forward to further developments! :)

Thanks for reading my article! Feel free to leave any feedback!

Daniel is a LL.M. student in business law, working as a software engineer and organizer of tech related events in Vienna. His current personal learning efforts focus on machine learning.

Connect on:

  • LinkedIn
  • Github
  • Medium
  • Twitter
  • Steemit
  • Hashnode