TensorFlow-virheenkorjauksen aloittaminen

Sisällysluettelo

  • Mistä tässä on kyse
  • Viitekoodipohja
  • 1. Hae ja tulosta arvot Session.run-tiedostosta
  • 2. Käytä tf.Print-toimintoa
  • 3. Käytä Tensorboard-visualisointia seurantaan
  • a) puhdista käyrä oikeilla nimillä ja nimialueilla
  • b) Lisää tiivistelmät
  • c) Luo lokitiedostot lisäämällä tf.summary.FileWriter
  • d) Käynnistä tensorboard-palvelin päätelaitteestasi
  • 4. Käytä Tensorboard-virheenkorjainta
  • 5. Käytä TensorFlow-virheenkorjainta
  • Johtopäätös

Mistä tässä on kyse

Virheenkorjaus on kaksi kertaa niin vaikeaa kuin koodin kirjoittaminen. Siksi, jos kirjoitat koodin mahdollisimman fiksusti, et ole määritelmän mukaan tarpeeksi fiksu virheenkorjausta varten. - BRIAN W.KERNIGHAN

Virheenkorjaus yleensä voi olla ikävä ja haastava tehtävä. Sinun on kuitenkin mukava käydä läpi kirjoitettu koodi ja tunnistaa ongelmat. Normaalisti oppaita on paljon, ja virheenkorjausprosessi on usein hyvin dokumentoitu monille kielille ja kehyksille.

Kun on kyse TensorFlow'sta, sen toimintatavasta johtuu kuitenkin uusia haasteita.

Kuten virallisissa asiakirjoissa todetaan:

TensorFlow Core -ohjelma koostuu kahdesta erillisestä osasta:

  1. Laskennallisen kaavion rakentaminen (a tf.Graph).
  2. Suoritetaan laskennallinen kaavio (käyttäen tf.Session).

Varsinainen laskenta tehdään session.run(), mikä tarkoittaa, että meidän on löydettävä tapa tarkastaa arvot tämän toiminnon sisällä.

Viitekoodipohja

Annan viitteenä Github-arkistoni vastaavan koodin täältä.

Käytämme perushermoverkkoa luokittelemaan käsinkirjoitetut numerot MNIST-tietojoukosta käyttämällä:

  • tf.nn.softmax_cross_entropy_with_logits_v2 TF-luokitusoperaationa tappion määrittelemiseksi
  • tf.train.GradientDescentOptimizer tappioiden minimoimiseksi

Tämän pienen hermoverkon käyttäminen osoittaa, että se voi jo saavuttaa ~ 92%: n tarkkuuden:

Virheenkorjaus

Nyt virheenkorjausta varten on periaatteessa 5 (käytännöllistä) tapaa saavuttaa tämä.

Lisähuomautuksena: On usein hyödyllistä väittää muotoja sen varmistamiseksi, että kaikki toimii yhdessä tarkoitetulla tavalla.

1. Hae ja tulosta arvot Session.run-tiedostosta

Tämä on luultavasti nopein ja helpoin tapa saada tarvitsemasi tiedot.

  • helppo ja nopea
  • minkä tahansa arvioinnin voi hakea kaikkialta
  • on välttämätöntä pitää viittaus tensoriin, mikä on huono monimutkaisissa malleissa

Pohjimmiltaan suoritat istunnon tulostuslausekkeessa ja syötät sille sanakirjan, kuten näin: print( f"The bias parameter is: {sess.run(b, feed_dict={x: mnist.test.images, y_: mnist.test.labels})}" )

Jos koodi monimutkaistuu, istunnon osittaista suoritusta voidaan käyttää. Mutta koska tämä on kokeellinen ominaisuus, en aio toteuttaa sitä esittelyä varten.

Älä myöskään unohda .eval()menetelmää tensoreiden arvioimiseksi.

Katso koko koodi täällä Githubissa.

2. Käytä tf.Print-toimintoa

Tf.Print-menetelmä on kätevä ajonaikaisen arvioinnin aikana, kun emme halua noutaa koodia nimen session.run () avulla. Se on identiteettioptio, joka tulostaa tietoja arvioitaessa.

  • sen avulla voimme nähdä arvojen kehityksen arvioinnin aikana
  • sillä on rajoitettu kokoonpano ja se voi siten tukkia päätelaitteen helposti

Yufeng G loi upean videon ja artikkelin tf.Print-käskyn käytöstä. Ja kuten hän huomauttaa, on elintärkeää rakentaa tulostussolmu siten, että sitä käytetään edelleen. Kuten hän sanoo:

On elintärkeää, että käytät tätä palautettua solmua, koska jos et käytä sitä, se roikkuu.

Koodiin lisäsin tulosteen, joka hakee arvot istunnon sisällä havainnollistaakseen, kuinka molemmat menetelmät toimivat eri tavalla suorituksessa.

Ajonaikaisen arvioinnin mukana tulee ajonaikaisen väittämisen mahdollisuus tf.Assert.

Katso koko koodi täältä.

3. Käytä Tensorboard-visualisointia seurantaan

Ennen kuin sukelat tähän virheenkorjausmenetelmään, muista, että on olemassa Tensorboard- ja Tensorboard-virheenkorjausohjelma!

TF-verkkosivusto tarjoaa upean opetusohjelman taulun toteuttamiseen ja käyttöön.

Avain käyttöön on tietojen sarjallisuus. TensorFlow tarjoaa yhteenvetotoiminnot, joiden avulla voit viedä tiivistettyä tietoa mallista. Ne ovat kuin ankkurit, jotka kertovat visualisointilaudalle mitä suunnitella.

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
  • järjestää moduulit ja koodi

Olen todella innoissani kaikista ominaisuuksista, joita TensorFlow tarjoaa ihmisille, jotka rakentavat koneoppimisjärjestelmiä. He tekevät hienoa työtä! Innolla jatkokehitystä! :)

Kiitos kun lukit artikkelini! Voit vapaasti jättää palautetta!

Daniel on oikeustieteen kandidaatti. kauppatieteiden opiskelija, työskentelee ohjelmistosuunnittelijana ja teknisten tapahtumien järjestäjänä Wienissä. Hänen nykyiset henkilökohtaiset oppimispyrkimyksensä keskittyvät koneoppimiseen.

Yhdistä:

  • LinkedIn
  • Github
  • Keskitaso
  • Viserrys
  • Steemit
  • Hashnode