Path: blob/master/site/ja/tensorboard/debugger_v2.md
38317 views
TensorBoard Debugger V2 ã䜿çšã㊠TensorFlow ããã°ã©ã ã®æ°å€ã®åé¡ããããã°ãã
泚æ: tf.debugging.experimental.enable_dump_debug_info() ã¯å®éšç API ã§ãããããå°æ¥çã«éèŠãªå€æŽãé©çšãããå ŽåããããŸãã
TensorFlow ããã°ã©ã ã§ã¯ NaN ã䌎ã壿» çãªã€ãã³ãã«ãã£ãŠãã¢ãã«ã®ãã¬ãŒãã³ã°ããã»ã¹ãé£åããŠããŸãããšã床ã ãããŸãããããã£ãã€ãã³ãã®æ ¹æºã¯ãç¹ã«äžè¬çã§ãªããµã€ãºãè€éã®ã¢ãã«ã«ãããŠã¯ã¯ã£ããããªãããšãå€ã ãããŸãããã®çš®ã®ã¢ãã«ã®äžå ·åãããç°¡åã«ãããã°ããããã«ãTensorBoard 2.3+ïŒTensorFlow 2.3+ ãšäœµçšïŒã«ã¯ Debugger V2 ãšããç¹æ®ãªããã·ã¥ããŒããæäŸãããŠããŸããããã§ã¯ãTensorFlow ã§èšè¿°ããããã¥ãŒã©ã«ãããã¯ãŒã¯ã«ããã NaN ã䌎ãå®éã®ãã°ã«å¯Ÿå¿ããªããããã®ããŒã«ã®äœ¿ç𿹿³ã宿ŒããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§èª¬æããææ³ã¯ãè€éãªããã°ã©ã ã«ãããã©ã³ã¿ã€ã ãã³ãœã«åœ¢ç¶ã®æ€æ»ãšãã£ããã»ãã®çš®é¡ã®ãããã°äœæ¥ã«ãé©çšã§ããŸãããã®ãã¥ãŒããªã¢ã«ã§ã¯ãæ¯èŒçã«å€ãçºçãã NaN ã®äºè±¡ã«çŠç¹ãåœãŠãŠããŸãã
ãã°ã芳å¯ãã
TF2 ããã°ã©ã ã®ãœãŒã¹ã³ãŒã㯠GitHub ã§å ¥æå¯èœã§ãããµã³ãã«ããã°ã©ã 㯠tensorflow pip packageïŒããŒãžã§ã³ 2.3+ïŒã«ãããã±ãŒãžåãããŠãããæ¬¡ã®ããã«ããŠåŒã³åºãããšãã§ããŸãã
ãã® TF2 ããã°ã©ã ã¯å€å±€ããŒã»ãããã³ïŒMLPïŒãäœæããMNIST ç»åãèªèã§ããããã«ãã¬ãŒãã³ã°ããŸãããã®äŸã§ã¯ãã«ã¹ã¿ã ã¬ã€ã€ãŒæ§é ãæå€±é¢æ°ãããã³ãã¬ãŒãã³ã°ã«ãŒãã®å®çŸ©ã«ãæå³çã«TF2 ã®äœã¬ãã« API ã䜿çšããŠããŸããtf.keras ã®ããã«ã䜿ãããããšãæè»æ§ã«ããå£ã API ã䜿çšãããããæè»æ§ãããé«ããŠããšã©ãŒãçãããããã® API ãäœ¿ãæ¹ããNaN ãã°ã®ç¢ºçãé«ããªãããã§ãã
ãã®ããã°ã©ã ã¯ããã¬ãŒãã³ã°ã¹ãããã®çµäºããšã«ãã¹ã粟床ãåºåããŸããæåã®ã¹ããããçµäºããåŸã«å¶ç¶ã«è¿ãã¬ãã«ïŒ~0.1ïŒã§ãã¹ã粟床ãåæ»ããæ§åãã³ã³ãœãŒã«ã§ç¢ºèªã§ããŸããããã¯ãã¢ãã«ã®ãã¬ãŒãã³ã°ã«æåŸ ãããåäœã§ã¯ãŸã£ãããããŸãããã¹ããããå¢å ãããã³ã«åŸã ã« 1.0ïŒ100%ïŒã«ç²ŸåºŠãè¿ã¥ããŠããå¿ èŠããããŸãã
çµéšã«åºãã°ããã®åé¡ã¯ NaN ãç¡é倧ãªã©ã®æ°å€çäžå®å®æ§ã«çãããã®ã§ããããšãæšæž¬ãããŸãããããã蚌æããã«ã¯ããŸãæ°å€çäžå®å®æ§ãçæããŠãã TensorFlow æŒç®ïŒop
ïŒãç¹å®ããã«ã¯ãã©ãããã°ããã®ã§ããããããã®çåã«
çããããã«ãDebugger V2 ã䜿ã£ãŠäžå
·åã®ããããã°ã©ã ã調ã¹ãŠã¿ãŸãããã
TensorFlow ã³ãŒãã« Debugger V2 ãèšè£ ãã
tf.debugging.experimental.enable_dump_debug_info() 㯠Debugger V2 ã® API ãšã³ããªãã€ã³ãã§ããTF2 ããã°ã©ã ã« 1 è¡ã®ã³ãŒããèšè£
ããŸããããšãã°ãããã°ã©ã ã®å
é è¿ãã«ä»¥äžã«ç€ºãè¡ã远å ãããšããã°ãã£ã¬ã¯ããªïŒlogdirïŒã§ãã /tmp/tfdbg2_logdir ã«ãããã°æ
å ±ãæžãåºãããŸãããããã°æ
å ±ã«ã¯ãTensorFlow ã©ã³ã¿ã€ã ã«é¢ããããŸããŸãªåŽé¢ãå«ãŸããŸããTF2 ã§ã¯ãEager executionã@tf.function ã«ããã°ã©ãã®æ§ç¯ãã°ã©ãã®å®è¡ãå®è¡ã€ãã³ãã«ãã£ãŠçæããããã³ãœã«å€ããããŠã€ãã³ãã®ã³ãŒãã®äœçœ®ïŒPython ã¹ã¿ãã¯ãã¬ãŒã¹ïŒã®å®å
šãªå±¥æŽãå«ãŸããŸãããããã°æ
å ±ãéåžžã«è±å¯ã§ãããããäžæçãªãã°ã®åå ãçµã蟌ãããšãã§ããŸãã
tensor_debug_mode åŒæ°ã¯ãDebugger V2 ãå Eager ãŸãã¯ã°ã©ãå
ã®ãã³ãœã«ããæœåºããæ
å ±ã管çããŸãããFULL_HEALTHãã¯ãåæµ®åå°æ°ç¹åãã³ãœã«ïŒäžè¬çã«ããèŠããã float32 ãããã»ã©äžè¬çã§ãªã bfloat16 dtype ãªã©ïŒã«é¢ããæ¬¡ã®æ
å ±ããã£ããã£ããã¢ãŒãã§ãã
DType
éæ°
èŠçŽ ã®ç·æ°
æµ®åå°æ°ç¹åèŠçŽ ã®å èš³: è² ã®æéïŒ
-ïŒããŒãïŒ0ïŒãæ£ã®æéïŒ+ïŒãè² ã®ç¡é倧ïŒ-âïŒãæ£ã®ç¡é倧ïŒ+âïŒãNaN
ãFULL_HEALTHãã¢ãŒãã¯ãNaN ãšç¡é倧ã䌎ããã°ã®ãããã°ã«æé©ãªã¢ãŒãã§ãã以äžã«ããã®ä»ã®ãµããŒããããŠãã tensor_debug_mode ã玹ä»ããŸãã
circular_buffer_size åŒæ°ã¯ãlogdir ã«ä¿åããããã³ãœã«ã€ãã³ãæ°ã管çããŸããããã©ã«ã㯠1000 ã§ãèšè£
ããã TF2 ããã°ã©ã ãçµäºããåã®æåŸã® 1000 ãã³ãœã«ã®ã¿ããã£ã¹ã¯ã«ä¿åãããŸãããã®ããããããã°ããŒã¿ã®å®å
šæ§ãæãªãããããããããã¬ã®ãªãŒããŒããããç·©åãããããã«èšèšãããŠããŸãããã®äŸã®ããã«å®å
šæ§ãåªå
ããå Žåã¯ããã®åŒæ°ãè² ã®å€ïŒãã®äŸã§ã¯ -1ïŒã«èšå®ããããšã§ã埪ç°ãããã¡ãç¡å¹ã«ããããšãã§ããŸãã
debug_mnist_v2 ã®äŸã§ã¯ãã³ãã³ãã©ã€ã³ãã©ã°ãæž¡ã㊠enable_dump_debug_info() ãåŒã³åºããŸãããããã°èšè£
ãæå¹ã«ããŠãåé¡ã®ãã TF2 ããã°ã©ã ãããäžåºŠå®è¡ããã«ã¯ã次ã®ããã«è¡ããŸãã
TensorBoard ã§ Debugger V2 GUI ãèµ·åãã
ãããã¬ãèšè£ ããŠããã°ã©ã ãå®è¡ãããšã/tmp/tfdbg2_logdir ã« logdir ãäœæãããŸããTensorBoard ãèµ·åããŠãã® logdir ã«ãã€ã³ãããã«ã¯ã次ã®ããã«è¡ããŸãã
ãŠã§ããã©ãŠã¶ã§ãhttp://localhost:6006 ã«ãã TensorBoard ã®ããŒãžã«ç§»åããŸãããDebugger V2ããã©ã°ã€ã³ã¯ããã©ã«ãã§ç¡å¹åãããŠãããããå³äžã®ãç¡å¹åãããŠãããã©ã°ã€ã³ãã¡ãã¥ãŒããéžæããŸããæ¬¡ã®ãããªããŒãžã衚瀺ãããŸãã

Debugger V2 ã䜿çšããŠãNaN ã®æ ¹æºãç¹å®ãã
TensorBoard ã® Debugger V2 GUI ã¯ã次㮠6 ã€ã®ã»ã¯ã·ã§ã³ã§ç·šæãããŠããŸãã
Alerts: å·Šäžã«ããèŠåã»ã¯ã·ã§ã³ã«ã¯ãèšè£ ããã TensorFlow ããã°ã©ã ã®ãããã°ããŒã¿ã®ãã¡ããããã¬ãæ€åºãããèŠåãã€ãã³ãã®ãªã¹ãã衚瀺ãããŸããåèŠåã¯ã泚æãå¿ èŠãšããç¹å®ã®ç°åžžã瀺ããŸãããã®äŸã§ã¯ããã®ã»ã¯ã·ã§ã³ã«ã¯ 499 åã® NaN/â ã€ãã³ããé®®ãããªèµ€ãã³ã¯è²ã§è¡šç€ºãããŠããŸããã€ãŸããå éšãã³ãœã«å€ã«ååšãã NaN ãç¡é倧ã«ãããã¢ãã«ãåŠç¿ã§ããªããšããç念ã確å®ãããããšã«ãªããŸãããã®èŠåã«ã€ããŠã¯ããã°ããããŠãã詳ããèŠãããšã«ããŸãã
Python Execution Timeline: äžäžå€®ã»ã¯ã·ã§ã³ã®äžååã«ããã®ã¯ Python å®è¡ã¿ã€ã ã©ã€ã³ã®ã»ã¯ã·ã§ã³ã§ããããã«ã¯ãæŒç®ãšã°ã©ãã® Eager execution ã®å šå±¥æŽã瀺ãããŸããã¿ã€ã ã©ã€ã³ã®åããã¯ã¹ã¯ãæŒç®ãŸãã¯ã°ã©ãåã®é æåã§èŠåããããããã«ãªã£ãŠããŸãïŒãTensorSliceDatasetãæŒç®ã®å Žåã¯ãTãããmodelã
tf.functionã®å Žåã¯ãmããªã©ïŒããã®ã¿ã€ã ã©ã€ã³ã®ããã²ãŒã·ã§ã³ã¯ãã¿ã€ã ã©ã€ã³ã®äžã«ããããã²ãŒã·ã§ã³ãã¿ã³ãšã¹ã¯ããŒã«ããŒã䜿çšããŸããGraph Execution : GUI ã®å³äžã«ããã°ã©ãå®è¡ã»ã¯ã·ã§ã³ã¯ããããã°ã¿ã¹ã¯ã®äž»åœ¹ã§ããã°ã©ãå ã§èšç®ããããã¹ãŠã®æµ®åå°æ°ç¹ dtype ãã³ãœã«ã®å±¥æŽã衚瀺ãããŸãã
Graph StructureïŒäžäžå€®ã®äžååã«ããã°ã©ãæ§é ã»ã¯ã·ã§ã³ïŒãSource CodeïŒå·Šäžã«ãããœãŒã¹ã³ãŒãã»ã¯ã·ã§ã³ïŒãããã³ Stack TraceïŒå³äžã«ããã¹ã¿ãã¯ãã¬ãŒã¹ã»ã¯ã·ã§ã³ïŒã¯ãæåã¯ç©ºã®ç¶æ ã«ãªã£ãŠããŸãããã®ã³ã³ãã³ãã¯ãGUI ãæäœãããšè¡šç€ºãããããã«ãªããŸããããã 3 ã€ã®ã»ã¯ã·ã§ã³ã«ããããã°ã¿ã¹ã¯ã®éèŠãªåœ¹å²ããããŸãã
UI ã®ç·šæã«ã€ããŠçè§£ãããšããã§ãæ¬¡ã®æé ã«ãããNaN ãåºçŸããçç±ã調ã¹ãããšã«ããŸãããããŸããAlerts ã»ã¯ã·ã§ã³ã® NaN/â èŠåãã¯ãªãã¯ããŸãããããšãGraph Execution ã»ã¯ã·ã§ã³ã«ãã 600 åã®ã°ã©ããã³ãœã«ã®ãªã¹ããèªåçã«ã¹ã¯ããŒã«ãã88 çªããã©ãŒã«ã¹ãããŸããããã¯ããLog:0ããšãããLogïŒèªç¶å¯Ÿæ°ïŒæŒç®ã«ãã£ãŠçæããããã³ãœã«ã§ãã2D float32 ãã³ãœã«ã® 1000 åã®èŠçŽ ã®ãã¡ã-â èŠçŽ ãé®®ãããªèµ€ãã³ã¯è²ã§ç€ºãããŠããŸãããããã NaN ãŸãã¯ç¡é倧ãå«ãã§ãã TF2 ããã°ã©ã ã®ã©ã³ã¿ã€ã å±¥æŽã®äžã§ãæåã®ãã³ãœã«ã§ãããã®åã«èšç®ããããã³ãœã«ã«ã¯ãNaN ãŸã㯠â ã¯å«ãŸããŠããŸãããããã以éã«èšç®ãããå€ãã®ïŒå®ã«ã»ãšãã©ã®ïŒãã³ãœã«ã«ã¯ NaN ãå«ãŸããŠããŸããããã¯ãGraph Execution ãªã¹ããäžäžã«ã¹ã¯ããŒã«ããã°ç¢ºèªã§ããŸãããã®ããã«èгå¯ããããšã§ãLog æŒç®ã TF2 ããã°ã©ã ã®æ°å€çäžå®å®æ§ã®åå ã§ãããšãã匷åãªãã³ããåŸãããšãã§ããŸãã

ã§ã¯ããã® Log æŒç®ã¯ãªã -â ãç®åºããŠããã®ã§ããããããã®çåã«çããã«ã¯ãæŒç®ãžã®å
¥åã調ã¹ãå¿
èŠããããŸãããã³ãœã«ã®ååïŒLog:0ïŒãã¯ãªãã¯ãããšãGraph Structure ã»ã¯ã·ã§ã³ã«ãåçŽã§ãããªããæçãªãTensorFlow ã°ã©ãã® Log æŒç®åšãã®èŠèŠåã衚瀺ãããŸããæ
å ±ã®æµãã®äžããäžã®æ¹åã§ããããšã«æ³šæããŠãã ãããæŒç®èªäœã¯äžå€®ã«å€ªåã§ç€ºãããŠããŸãããã®ããäžã«ã¯ããã¬ãŒã¹ãã«ããŒæŒç®ã Log æŒç®ã«å¯äžã®å
¥åãæäŸããŠããããšãããããŸãããã® probs ãã¬ãŒã¹ãã«ããçæãããã³ãœã«ã¯ Graph Execution ãªã¹ãã®ã©ãã«ããã®ã§ãããããèŠèŠçãªæ¯æŽãšããŠé»è²ãèæ¯è²ã䜿çšãããšãprobs:0 ãã³ãœã«ã Log:0 ãã³ãœã«ã® 2 è¡äžãã€ãŸãè¡ 85 ã«ããããšãããããŸãã

è¡ 85 ã® probs:0 ãã³ãœã«ã®æ°å€å
èš³ããã£ãšæ³šæããŠèŠãŠã¿ããšããããæ¶è²»ãã Log:0 ã -â ãçæããŠããçç±ãããããŸããprobs:0 ã® 1000 åã®èŠçŽ ã®ãã¡ã1 ã€ã®èŠçŽ ã« 0 ã®å€ããããŸãã-â ã¯èªç¶å¯Ÿæ° 0 ãèšç®ããçµæãªã®ã§ãïŒ Log æŒç®ãæ£ã®å
¥åã®ã¿ã«å
¬éãããããšãäœããã®æ¹æ³ã§ç¢ºä¿ããã°ãNaN/â ãèµ·ãããªãããã«ããããšãã§ããã§ããããããã¯ããã¬ãŒã¹ãã«ã㌠probs ã®ãã³ãœã«ã§ã¯ãªããã³ã°ãé©çšïŒ tf.clip_by_value() ã䜿çšïŒããŠãéæã§ããŸãã
ãã°ã®è§£æ±ºã«ã¯è¿ã¥ããŠããŸããããŸã ãŸã ã§ããä¿®æ£ãé©çšããã«ã¯ãPython ãœãŒã¹ã³ãŒãã§ãLog æŒç®ãšãã¬ãŒã¹ãã«ãå
¥åãçºçããå Žæãç¥ãå¿
èŠããããŸããDebugger V2 ã«ã¯ãã°ã©ãæŒç®ãšå®è¡ã€ãã³ãããã®æºãŸã§ãã¬ãŒã¹ããããã®åªãããµããŒããæäŸãããŠããŸããGraph Execution ã§ Log:0 ãã³ãœã«ãã¯ãªãã¯ãããšãStack Trace ã»ã¯ã·ã§ã³ã« Log æŒç®ã®äœæã®å
ã®ã¹ã¿ãã¯ãã¬ãŒã¹ã衚瀺ãããŸãããã®ã¹ã¿ãã¯ãã¬ãŒã¹ã«ã¯ TensorFlow ã®å
éšã³ãŒãïŒgen_math_ops.py ã dumping_callback.py ãªã©ïŒããã®å€ãã®ãã¬ãŒã ãå«ãŸãããããããçšåºŠå€§ãããªããŸããããããã®ãã¬ãŒã ã®å€ãã¯ãããã°ã¿ã¹ã¯ã§ç¡èŠã§ãããã®ã§ããé¢å¿ã®ãããã¬ãŒã ã¯ãdebug_mnist_v2.pyïŒãããã°ããããšããŠãã Python ãã¡ã€ã«ïŒã®è¡ 216 ã§ãããLine 204ããã¯ãªãã¯ãããšãSource Code ã»ã¯ã·ã§ã³ã«ã察å¿ããã³ãŒãè¡ã®ãã¥ãŒã衚瀺ãããŸãã

ããã§ãããããprobså
¥åããåé¡ã®ãã Log æŒç®ãäœæãããœãŒã¹ã³ãŒãã«ãã©ãçããŸããããã¯ã@tf.function ã§ãã³ã¬ãŒãããããã€ãŸã TensorFlow ã°ã©ãã«å€æãããã«ã¹ã¿ã ã«ããŽãªã®ã¯ãã¹ãšã³ããããŒæå€±é¢æ°ã§ãããã¬ãŒã¹ãã«ãæŒç®ã® probs ã¯ãæå€±é¢æ°ã®æåã®å
¥ååŒæ°ã«å¯Ÿå¿ããŸããLog æŒç®ã¯ãtf.math.log() API åŒã³åºãã§äœæãããŠããŸãã
å€ãã¯ãªããã³ã°ããããã®ãã°ã®ä¿®æ£ã¯æ¬¡ã®ããã«ãªããŸãã
ããã§ãTF2 ã®æ°å€çäžå®å®æ§ã解決ããMLP ã®ãã¬ãŒãã³ã°ãæåããããã«ãªããŸããæ°å€çäžå®å®æ§ã®ä¿®æ£ã¢ãããŒããšããŠããã 1 ã€ãtf.keras.losses.CategoricalCrossentropy ã䜿çšããæ¹æ³ããããŸãã
ããã§ãDebugger V2 ããŒã«ãå©çšãããTF2 ã¢ãã«ã®ãã°ã®èгå¯ãããã°ãä¿®æ£ããã³ãŒããã§ã³ãžã®ç¹å®ãŸã§ã®éã®ãã¯çµäºã§ãããã®ããŒã«ã«ãã£ãŠãèšè£ ããã TF2 ããã°ã©ã ã® Eager ãšã°ã©ãå®è¡ã«é¢ããããã³ãœã«å€ã®æ°å€èŠçŽããæŒç®ãšãã³ãœã«ãããã³å ã®ãœãŒã¹ã³ãŒãéã®é¢é£æ§ãªã©ã®å®å šãªå¯èŠæ§ãåŸãããšãã§ããŸããã
Debugger V2 ã®ããŒããŠã§ã¢äºææ§
Debugger V2 ã¯ãCPU ãš GPU ãå«ããã¡ã€ã³ã¹ããªãŒã ã®ãã¬ãŒãã³ã°ããŒããŠã§ã¢ããµããŒãããŠããŸããtf.distributed.MirroredStrategy ã«ãããã«ã GPU ãã¬ãŒãã³ã°ããµããŒããããŠããŸããTPU ã®ãµããŒãã«ã€ããŠã¯ããŸã æ©ææ®µéã«ãããæ¬¡ã®ã³ãŒã
ã enable_dump_debug_info() ãåŒã³åºãåã«åŒã³åºãå¿
èŠããããŸããTPU ã«ã¯ã»ãã®å¶éãããå¯èœæ§ããããŸããDebugger V2 ã䜿çšäžã«åé¡ã«ç·å
·ããå Žåã¯ãGitHub 課é¡ããŒãžã«ãã°ãå ±åããŠãã ããã
Debugger V2 ã® API äºææ§
Debugger V2 ã¯ãTensorFlow ã®ãœãããŠã§ã¢ã¹ã¿ãã¯ã§ã¯æ¯èŒçã«äœã¬ãã«ã«å®è£ ãããŠãããããtf.kerasãtf.dataãããã³ TensorFlow ã®äœã¬ãã«ã®äžã«æ§ç¯ããã API ãšã®äºææ§ããããŸãããŸããTF1 ãšã®äžäœäºææ§ãæããŠããŸãããEager Execution Timeline ã¯ãTF1 ããã°ã©ã ã«ãã£ãŠçæããããããã°ã® logdir ã空ã«ãªããŸãã
API ã®äœ¿çšã«é¢ãããã³ã
ãã®ãããã° API ã«é¢ããŠããå°ãããã質åã¯ãTensorFlow ã³ãŒãã®ã©ãã«ãenable_dump_debug_info() ãžã®åŒã³åºããæ¿å
¥ãã¹ããããšããããšã§ããéåžžãAPI ã¯ãTF2 ããã°ã©ã ã®ã§ããã ãå
é è¿ãã«ãã§ããã° Python ã€ã³ããŒãè¡ãšã°ã©ãã®æ§ç¯ãšå®è¡ã®éå§ã®éã«åŒã³åºãå¿
èŠããããŸãããããããšãã¢ãã«ãšãã¬ãŒãã³ã°ãæ©èœããããã¹ãŠã®æŒç®ãšã°ã©ããå®å
šã«ç¶²çŸ
ããããšãã§ããŸãã
çŸåšãµããŒããããŠãã tensor_debug_modes ã¯ãNO_TENSORãCURT_HEALTHãCONCISE_HEALTHãFULL_HEALTHãããã³ SHAPE ã§ããåãã³ãœã«ããæœåºããããæ
å ±éããããã°å¯Ÿè±¡ã®ããã°ã©ã ãžã®ããã©ãŒãã³ã¹ã®ãªãŒããŒãããéã¯ãã¢ãŒãã«ãã£ãŠç°ãªããŸãã詳现ã¯ãenable_dump_debug_info() ã®ããã¥ã¡ã³ãã®åŒæ°ã»ã¯ã·ã§ã³ãã芧ãã ããã
ããã©ãŒãã³ã¹ãªãŒããŒããã
ãããã° API ã§ã¯ãèšè£
ããã TensorFlow ããã°ã©ã ã«ããã©ãŒãã³ã¹ãªãŒããŒããããçããŸããåã®ãªãŒããŒãããã¯ãtensor_debug_modeãããŒããŠã§ã¢ã®çš®é¡ãããã³èšè£
ããã TensorFlow ããã°ã©ã ã®æ§è³ªã«ãã£ãŠç°ãªããŸãããåºæºãšããŠã¯ãGPU ã§ã¯ NO_TENSOR ã¢ãŒãã®å Žåãããããµã€ãº 64 ã®å€æã¢ãã«ã®ãã¬ãŒãã³ã°äžã«ã15% ã®ãªãŒããŒãããã远å ãããŸããã»ãã® tensor_debug_mode ã®å Žåã®ãªãŒããŒãããã®å²åã¯é«ããªãåŸåã«ãããCURT_HEALTHãCONCISE_HEALTHãFULL_HEALTHãããã³ SHAPE ã¢ãŒãã§ã¯çŽ 50% å¢ãšãªããŸããCPU ã§ã¯ããäœããªãåŸåã«ãããTPU ã§ã¯çŸæç¹ã§ã¯é«ããªãåŸåã«ãããŸãã
ã»ãã® TensorFlow ãããã° API ãšã®é¢ä¿
TensorFlow ã«ã¯ããããã°çšã®ã»ãã®ããŒã«ã API ããããAPI ããã¥ã¡ã³ãããŒãžã® tf.debugging.* åå空éã§åç
§ããããšãã§ããŸãããããã® API ã®äžã§ãæãé »ç¹ã«äœ¿çšãããã®ã¯ tf.print() ã§ããã〠Debugger V2 ã䜿çšããã〠tf.print() ã䜿çšããã®ã§ãããããtf.print() ã¯æ¬¡ã®ãããªå Žåã«äŸ¿å©ã§ãã
åºåãããã³ãœã«ãæç¢ºã«åãã£ãŠããå Žå
tf.print()ã¹ããŒãã¡ã³ããæ¿å ¥ãããœãŒã¹ã³ãŒãã®ç®æãæç¢ºã«åãã£ãŠããå Žåãã®ãããªãã³ãœã«ã®æ°ã倧ããããªãå Žå
ã»ãã®å ŽåïŒå€æ°ã®ãã³ãœã«å€ã調ã¹ããTensorFlow ã®å
éšã³ãŒãã«ãã£ãŠçæããããã³ãœã«å€ã調ã¹ããäžèšã§ç€ºããããã«æ°å€çäžå®å®æ§ã®åºæãçªãæ¢ãããšãã£ãå ŽåïŒã«ã¯ãDebugger V2 ã®æ¹ããããã°ãçŽ æ©ã宿œã§ããŸããããã«ãDebugger V2 ã§ã¯ Eager ãšã°ã©ããã³ãœã«ã®æ€æ»ã«äœ¿çšããã¢ãããŒããçµ±äžãããŠããã ãã§ãªããtf.print() ã§ã¯ãã®æ©èœå€ãšãªãã°ã©ãæ§é ãã³ãŒãã®äœçœ®ã«é¢ããæ
å ±ãæäŸããããšãã§ããŸã
â ãš NaN ã䌎ãåé¡ããããã°ããäžã§äœ¿çšã§ãããã 1 ã€ã® API ã« tf.debugging.enable_check_numerics() ããããŸããenable_dump_debug_info() ãšã¯ç°ãªããenable_check_numerics() ã¯ãããã°æ
å ±ããã£ã¹ã¯ã«ä¿åãããTensorFlow ã©ã³ã¿ã€ã äžã« â ãš NaN ãç£èŠããããšããè¡ããŸããããŸããæŒç®ããããã£ãäžæ£ãªæ°å€ãçæãããšãå
ã®ã³ãŒãã§ãšã©ãŒãçºè¡ããŸããenable_dump_debug_info() ã«æ¯ã¹ãã°ããã©ãŒãã³ã¹ãªãŒããŒãããã¯äœããªããŸãããããã°ã©ã ã®å®è¡å±¥æŽãå®å
šã«ãã¬ãŒã¹ããããšã¯ã§ããŸããããŸããDebugger V2 ã®ãããªã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæäŸãããŠããŸããã