Како започети отклањање грешака у програму ТенсорФлов

Преглед садржаја

  • О чему се ради
  • База референтног кода
  • 1. Дохвати и испиши вредности у оквиру Сессион.рун
  • 2. Користите операцију тф.Принт
  • 3. За надзор користите визуализацију Тенсорбоард
  • а) очистите графикон властитим именима и опсезима имена
  • б) Додајте табеле
  • ц) Додајте тф.суммари.ФилеВритер да бисте креирали датотеке дневника
  • д) Покрените тенсорбоард сервер са вашег терминала
  • 4. Користите програм за отклањање погрешака Тенсорбоард
  • 5. Користите програм за отклањање погрешака ТенсорФлов
  • Закључак

О чему се ради

Отклањање грешака је прво двоструко теже од писања кода. Стога, ако код напишете што паметније, по дефиницији нисте довољно паметни да бисте га исправили. - БРИАН В. КЕРНИГХАН

Отклањање грешака уопште може бити досадан и изазован задатак. Ипак, мора вам бити пријатно да пролазите кроз писани код и идентификујете проблеме. Обично постоји много водича, а поступак отклањања грешака често је добро документован за многе језике и оквире.

Када је реч о ТенсорФлов-у, међутим, појављују се нови изазови због начина на који он функционише.

Као што званична документација каже:

Програм ТенсорФлов Цоре састоји се од два одвојена дела:

  1. Изградња рачунарског графа (тф.Грапх).
  2. Покретање рачунског графа (помоћу тф.Сессион).

Стварно рачунање се врши помоћу session.run(), што значи да морамо пронаћи начин за проверу вредности унутар ове функције.

База референтног кода

Као референцу, овде ћу пружити свом Гитхуб-овом спремишту одговарајући код.

Користићемо основну неуронску мрежу за класификацију ручно написаних цифара из скупа података МНИСТ, користећи:

  • tf.nn.softmax_cross_entropy_with_logits_v2 као операција класификације ТФ за дефинисање губитка
  • tf.train.GradientDescentOptimizer ради смањења губитка

Покретање ове мале неуронске мреже показује да већ може постићи тачност од ~ 92%:

Процес отклањања грешака

Сада за отклањање грешака у основи постоји 5 (прагматичних) начина да се то постигне.

Као пратећа напомена: Често је корисно тврдити облике како би се осигурало да све функционише како је предвиђено.

1. Дохвати и испиши вредности у оквиру Сессион.рун

Ово је вероватно најбржи и најлакши начин да добијете потребне информације.

  • лако и брзо
  • било која процена се може преузети од било кога
  • неопходно је задржати референцу на тензор, што је лоше у сложеним моделима

У суштини, покренете сесију у изјави за штампање и убацујете је у речник, отприлике тако: print( f"The bias parameter is: {sess.run(b, feed_dict={x: mnist.test.images, y_: mnist.test.labels})}" )

Ако код постане сложенији, могло би се користити делимично извршавање сесије. Али пошто је ово експериментална карактеристика, нећу је применити за демонстрацију.

Поред тога, не заборавите на .eval()метод за посебно вредновање тензора.

Погледајте целокупан код овде на Гитхуб-у.

2. Користите операцију тф.Принт

Метода тф.Принт добро дође током процене времена извођења када не желимо експлицитно да преузмемо код са сессион.рун (). То је оперативни систем идентитета који штампа податке приликом процене.

  • омогућава нам да видимо развој вредности током оцењивања
  • има ограничену конфигурацију и стога може лако зачепити терминал

Иуфенг Г је створио фантастичан видео и чланак о томе како се користи изјава тф.Принт. И како истиче, од виталне је важности чвор за штампу структурирати на начин на који се даље користи. Као што каже:

Од виталне је важности да заправо користите овај враћени чвор, јер ако га не користите, он ће бити висећи.

У свој код сам додао исказ за испис који преузима вредности унутар сесије да би илустровао како се обе методе различито изводе у извршавању.

Са проценом времена извршавања долази и могућност тврдње о извођењу са tf.Assert.

Комплетни код погледајте овде.

3. За надзор користите визуализацију Тенсорбоард

Пре него што зароните у овај метод отклањања грешака, имајте на уму да постоје Тенсорбоард и Тенсорбоард програм за отклањање грешака!

Веб локација ТФ нуди одличан водич за примену и употребу плоче.

Кључ за употребу је сериализација података. ТенсорФлов пружа резиме операције, које вам омогућавају да извезете сажете информације о моделу. Они су попут сидара који плочи за визуализацију говоре шта да зацрта.

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
  • организујте своје модуле и код

Заиста сам узбуђен због свих функција које ТенсорФлов нуди људима који граде системе машинског учења. Они раде сјајан посао! Радујемо се даљем развоју догађаја! :)

Хвала што сте прочитали мој чланак! Слободно оставите било какве повратне информације!

Даниел је ЛЛ.М. студент пословног права, који ради као софтверски инжењер и организатор техничких догађаја у Бечу. Његови тренутни напори за лично учење усредсређени су на машинско учење.

Повежите се на:

  • ЛинкедИн
  • Гитхуб
  • Средње
  • Твиттер
  • Стеемит
  • Хасхноде