
TensorFlowãããžã§ã¯ãã¯ãããªããèããŠããããã倧ããã§ãã ããããã£ãŒãã©ãŒãã³ã°ã©ã€ãã©ãªã§ãããGoogleãšã®æ¥ç¶ã«ãããTensorFlowãããžã§ã¯ãã倧ããªæ³šç®ãéããŠããŸãã ããããèªå€§åºåãå¿ããå Žåããã®ãŠããŒã¯ãªè©³çްã®ããã€ãã¯ããæ·±ãç ç©¶ã«å€ããŸã
- ã³ã¢ã©ã€ãã©ãªã¯ããã£ãŒãã©ãŒãã³ã°ã ãã§ãªããå¹
åºãçš®é¡ã®æ©æ¢°åŠç¿ææ³ã«é©ããŠããŸãã
- ç·åœ¢ä»£æ°ãšä»ã®å
éšã¯ãå€éšããã¯ã£ãããšèŠããŸãã
- æ©æ¢°åŠç¿ã®ã³ã¢æ©èœã«å ããŠãTensorFlowã«ã¯ç¬èªã®ãã°ã·ã¹ãã ãç¬èªã®å¯Ÿè©±åãã°ããžã¥ã¢ã©ã€ã¶ãŒãããã«åŒ·åãªããŒã¿é
ä¿¡ã¢ãŒããã¯ãã£ãå«ãŸããŠããŸãã
- TensorFlowå®è¡ã¢ãã«ã¯ãPythonã®scikit-learnãRã®ã»ãšãã©ã®ããŒã«ãšã¯ç°ãªããŸãã
ãããã¯ãã¹ãŠã¯ãŒã«ã§ãããç¹ã«æ©æ¢°åŠç¿ãå§ããã°ããã®äººã«ãšã£ãŠã¯ãTensorFlowãçè§£ããã®ã¯éåžžã«å°é£ã§ãã
TensorFlowã¯ã©ã®ããã«æ©èœããŸããïŒ åéšåãã©ã®ããã«æ©èœããããçè§£ããèŠãŠãçè§£ããŠã¿ãŸãããã ããŒã¿ãééããèšç®ã決å®ããããŒã¿ç§»åã°ã©ãã調ã¹ãTensorFlowã䜿çšããŠåŸé
éäžã§ã¢ãã«ããã¬ãŒãã³ã°ããæ¹æ³ãçè§£ãã TensorBoardãTensorFlowã®åäœãèŠèŠåããæ¹æ³ãçè§£ããŸãã ãã®äŸã¯ãç£æ¥ã¬ãã«ã§ã®æ©æ¢°åŠç¿ã®å®éã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸããããå°æ¥äœæãããã®ãå«ããTensorFlowã§äœæããããã¹ãŠã®åºç€ãšãªãã³ã³ããŒãã³ããçè§£ããã®ã«åœ¹ç«ã¡ãŸãïŒ
Pythonããã³TensorFlowã§ã®ååãšå®è¡
TensorFlowãèšç®ã管çããæ¹æ³ã¯ãPythonãéåžžè¡ãæ¹æ³ãšå€§å·®ãããŸããã ã©ã¡ãã®å Žåãã Hadley Wickhamãèšãæãããšããªããžã§ã¯ãã«ã¯ååããªãããšãèŠããŠããããšãéèŠã§ãïŒç»å1ãåç
§ïŒã PythonãšTensorFlowã®ååã®é¡äŒŒç¹ãšçžéç¹ãçè§£ããããã«ããªããžã§ã¯ãã®åç
§æ¹æ³ãšèšç®ã®åŠçæ¹æ³ãèŠãŠã¿ãŸãããã

ç»å1.ååã¯ãªããžã§ã¯ãããæã£ãŠããŸãããããã®éã¯ãããŸããã ãããªãŒãŠã£ãã«ã ã€ã©ã¹ããèš±å¯ãåŸãŠäœ¿çšã
Python倿°åã¯ããããã衚ããã®ã§ã¯ãããŸããã ãããã¯åã«ãªããžã§ã¯ããæããŸãã ãããã£ãŠãPythonã§foo = []
ããã³bar = foo
ãšèšè¿°ããå Žåãããã¯foo
ãbar
ãšçããããšãæå³ããŸããã foo
㯠bar
ãäž¡æ¹ãšãåããªã¹ããªããžã§ã¯ããæããŠãããšããæå³ã§ãã
>>> foo = [] >>> bar = foo >>> foo == bar
id(foo)
ãšid(bar)
åãã§ããããšã確èªããããšãã§ãid(bar)
ã ç¹ã«ãªã¹ãã®ãããªå¯å€ããŒã¿æ§é ã®å Žåããã®ã¢ã€ãã³ãã£ãã£ã¯ã誀解ããããšæ·±å»ãªãã°ã«ã€ãªããå¯èœæ§ããããŸãã
Pythonå
ã§ã¯ããã¹ãŠã®ãªããžã§ã¯ãã管çãã倿°åãšåååãåç
§ãããªããžã§ã¯ãã远跡ããŸãã TensorFlowã°ã©ãã¯ããã®ã¿ã€ãã®ã³ã³ãããŒã«ã®å¥ã®ã¬ã€ã€ãŒã衚ããŸãã åŸã§èŠãããã«ãPythonã®ååã¯ãTensorFlowã°ã©ãã®ãã詳现ã§ããæ£ç¢ºã«å¶åŸ¡ãããæäœã«æ¥ç¶ãããŠãããªããžã§ã¯ããæããŸãã
ããšãã°ãã€ã³ã¿ã©ã¯ãã£ãã€ã³ã¿ãŒããªã¿REPLïŒRead Evaluate Print LoopïŒã§Pythonã«åŒãå
¥åãããšãå
¥åãããã¹ãŠã®å
容ãã»ãšãã©åžžã«å³åº§ã«èšç®ãããŸãã Pythonã¯ããªããæ³šæããããšãç±æããŠããŸãã ãããã£ãŠã foo.append(bar)
ãå®è¡ããããã«åœŒã«æç€ºãããšãããšãfoo
䜿çšããªããŠããããã«è¿œå ãããŸãã
æ ierãªä»£æ¿æ¡ã¯ãç§ãfoo.append(bar)
ãšèšã£ãããšãæãåºãããšã§ãããå°æ¥ã®ããæç¹ã§foo
ãèšç®ããå ŽåãPythonã远å ããŸãã ããã¯ãTensorFlowã®åäœã«è¿ãã§ããTensorFlowã§ã¯ãé¢ä¿ã®å®çŸ©ã¯çµæã®èšç®ãšã¯é¢ä¿ãããŸããã
TensorFlowã¯äžè¬ã«ç°ãªãå Žæã§çºçãããããèšç®ã®å®çŸ©ãšå®è¡ãããã«åé¢ããŸããã°ã©ãã¯æäœãå®çŸ©ããŸãããæäœã¯ã»ãã·ã§ã³å
ã§ã®ã¿çºçããŸãã ã°ã©ããšã»ãã·ã§ã³ã¯äºãã«ç¬ç«ããŠäœæãããŸãã ã°ã©ãã¯äžçš®ã®éåçã§ãããã»ãã·ã§ã³ã¯äžçš®ã®å»ºèšçŸå Žã§ãã
åçŽãªPythonã®äŸã«æ»ã£ãŠã foo
ãšbar
ãåããªã¹ããæããŠããããšãæãåºããŸãã bar
ãfoo
ã«è¿œå ããŠããªã¹ããèªåã®äžã«æ¿å
¥ããŸããã ããã¯ãããèªäœãæã1ã€ã®ããŒããæã€ã°ã©ããšããŠæ³åã§ããŸãã å
¥ãåãªã¹ãã¯ãTensorFlowèšç®ã°ã©ãã«äŒŒãã°ã©ãæ§é ã衚ã1ã€ã®æ¹æ³ã§ãã
>>> foo.append(bar) >>> foo
å®éã®TensorFlowã°ã©ãã¯ããã«è峿·±ããã®ã«ãªããŸãïŒ
æãåçŽãªã°ã©ãTensorFlow
ãããã¯ã«é£ã³èŸŒãããã«ãæãç°¡åãªTensorFlowã°ã©ãããŒãããäœæããŸãããã 幞ããªããšã«ãTensorFlowã¯ä»ã®ãã¬ãŒã ã¯ãŒã¯ãããç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãã ãã®äŸã¯Python 2.7ãŸãã¯3.3+ã§åäœããTensorFlow 0.8ã䜿çšããŠããŸãã
>>> import tensorflow as tf
ãã®æç¹ã§ãTensorFlowã¯ãã§ã«å€ãã®ç¶æ
ã®ç®¡çãéå§ããŠããŸãã ããšãã°ãæç€ºçãªããã©ã«ãã°ã©ãã¯ãã§ã«ååšããŸãã ã°ã©ãå
ã®ããã©ã«ãã¯_default_graph_stack
ã«ãããŸãããçŽæ¥ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã tf.get_default_graph()
ã䜿çšããŸãã
>>> graph = tf.get_default_graph()
TensorFlowã°ã©ãã®ããŒãã¯ãæäœïŒãæäœããŸãã¯ãæäœãïŒãšåŒã°ããŸãã graph.get_operations()
ã䜿çšããŠäžé£ã®æäœã確èªã§ããŸãã
>>> graph.get_operations()
ããã§ãåã¯ç©ºã«ãªããŸããã TensorFlowã©ã€ãã©ãªãèšç®ããããã«å¿
èŠãªãã®ããã¹ãŠè¿œå ããå¿
èŠããããŸãã ãŸããå€ã1ã®åçŽãªå®æ°ã远å ããŸãã
>>> input_value = tf.constant(1.0)
çŸåšããã®å®æ°ã¯ããŒããã°ã©ãã®æäœãšããŠååšããŠããŸãã Python倿°åinput_value
鿥çã«ãã®æäœãæããŸãããããã©ã«ãã®ã°ã©ãã§ãèŠã€ããããšãã§ããŸãã
>>> operations = graph.get_operations() >>> operations
TensorFlowã¯å
éšã§ãããã³ã«ãããã¡ãŒåœ¢åŒã䜿çšããŸãã ïŒ ãããã³ã«ãããã¡ã¯Googleã¬ãã«ã®JSONã®ãããªãã®ã§ãïŒã äžèšã®å®æ°æäœã®node_def
ã®åºåã¯ã node_def
ãçªå·1ã®ãããã³ã«ãããã¡ãŒãã¥ãŒã«æ ŒçŽããããšã瀺ããŠããŸãã
TensorFlowã«æ
£ããŠããªã人ã¯ãæ¢åã®ãã®ã®ãTensorFlowããŒãžã§ã³ããäœæããããšã®æ¬è³ªã¯äœããšçåã«æãããšããããŸãã TensorFlowãªããžã§ã¯ãã远å ã§å®çŸ©ãã代ããã«ãéåžžã®Python倿°ã䜿çšã§ããªãã®ã¯ãªãã§ããïŒ TensorFlowãã¥ãŒããªã¢ã«ã®1ã€ã«èª¬æããããŸãã
Pythonã§å¹ççãªæ°å€èšç®ãå®è¡ããã«ã¯ãéåžžNumPyãªã©ã®ã©ã€ãã©ãªã䜿çšãããŸããããã¯ãPythonã®å€éšã§è¡åä¹ç®ãªã©ã®é«äŸ¡ãªæŒç®ãå®è¡ããå¥ã®èšèªã§å®è£
ãããéåžžã«å¹ççãªã³ãŒãã䜿çšããŸãã æ®å¿µãªãããåæäœã®åŸã«Pythonã«åãæ¿ãããšäœåãªè² è·ãããããŸãã ãã®è² è·ã¯ãGPUãŸãã¯åæ£ã¢ãŒãã§èšç®ãå®è¡ããå¿
èŠãããå Žåã«ç¹ã«é¡èã§ããããŒã¿è»¢éã¯é«äŸ¡ãªæäœã§ãã
TensorFlowã¯Python以å€ã§ãè€éãªèšç®ãå®è¡ããŸãããäœåãªäœæ¥è² è·ãåé¿ããããã«ããã«é²ãã§ããŸãã TensorFlowã¯ãPythonããç¬ç«ããŠ1ã€ã®é«äŸ¡ãªæäœãå®è¡ãã代ããã«ãPythonã®å®å
šã«å€éšã§æ©èœããçžäºäœçšããæäœã®ã°ã©ããèšè¿°ããããšãã§ããŸãã åæ§ã®ã¢ãããŒããTheanoãšTorchã§äœ¿çšãããŠããŸãã
TensorFlowã¯å€ãã®ãã°ãããæ©èœãå®è¡ã§ããŸãããæç€ºçã«æž¡ããããã®ã§ã®ã¿æ©èœããŸãã ããã¯ã1ã€ã®å®æ°ã«ãåœãŠã¯ãŸããŸãã
input_value
ãèŠããšãããã¯ãŒã次å
ã®32ããããã³ãœã«ãšããŠèŠãããšãã§ããŸãïŒãã 1ã€ã®æ°åã§ãã
>>> input_value
å€ã æå®ãããŠããªãããšã«æ³šæããŠãã ããã input_value
ãèšç®ããŠæ°å€ãååŸããã«ã¯ãã°ã©ãæäœãèšç®ã§ãããã»ãã·ã§ã³ããäœæãã input_value
æç€ºçã«èšç®ãŸãã¯ãå®è¡ãããinput_value
ãŸãã ïŒã»ãã·ã§ã³ã¯ããã©ã«ãã®ã°ã©ãã䜿çšããŸãïŒã
>>> sess = tf.Session() >>> sess.run(input_value)
宿°ããå®è¡ãããã®ã¯å¥åŠã«æãããããããŸããã ããããããã¯Pythonã§ã®éåžžã®åŒèšç®ãšå€§å·®ãããŸããã TensorFlowã¯ãç¬èªã®ããŒã¿ç©ºéïŒèšç®ã°ã©ãïŒã管çããç¬èªã®èšç®æ¹æ³ãåããŠããŸãã
æãåçŽãªTensorFlowãã¥ãŒãã³
ç°¡åãªã°ã©ãã䜿çšããã»ãã·ã§ã³ãã§ããã®ã§ã1ã€ã®ãã©ã¡ãŒã¿ãŒãŸãã¯éã¿ãæã€ãã¥ãŒãã³ãäœæããŸãããã å€ãã®å ŽåãåçŽãªãã¥ãŒãã³ã«ããã€ã¢ã¹é
ãšéåäžæ§æŽ»æ§å颿°ãå«ãŸããŠããŸããããããã¯ãªããŠãå¯èœã§ãã
ãã¥ãŒãã³ã®éã¿ã¯äžå®ã§ã¯ãããŸããã ãã¬ãŒãã³ã°ã«äœ¿çšãããå
¥åããŒã¿ãšåºåããŒã¿ã®çå®ã«åºã¥ããŠããã¬ãŒãã³ã°äžã«å€åããããšãäºæ³ãããŸãã éã¿ã¯TensorFlow 倿°ã«ãªããŸã ã 圌女ã«0.8ã®åæå€ãäžããŸãã
>>> weight = tf.Variable(0.8)
倿°ã远å ãããšã°ã©ãã«æäœã远å ããããšæããããããŸããããå®éã«ã¯ãã®è¡ã ãã§4ã€ã®æäœã远å ãããŸãã ããªãã¯åœŒãã®ååãèŠã€ããããšãã§ããŸãïŒ
>>> for op in graph.get_operations(): print(op.name)
ã骚ã§ãåæäœãããŸãã«ãé·ãåè§£ããããªãã®ã§ãå°ãªããšãå®éã®èšç®ã®ããã«èŠãããã®ãäœæããŸãããã
>>> output_value = weight * input_value
ã°ã©ãã«ã¯6ã€ã®æŒç®ããããæåŸã¯ä¹ç®ã§ãã
>>> op = graph.get_operations()[-1] >>> op.name
ããã§ã¯ãä¹ç®ã®æäœãå
¥åããŒã¿ã®ãœãŒã¹ãã©ã®ããã«ç£èŠããããèŠãããšãã§ããŸãããããã¯ã°ã©ãã®ä»ã®æäœããã®ãã®ã§ãã ã°ã©ãå
šäœã®æ§é ãçè§£ããããã«ã人ããã¹ãŠã®ã€ãªããã远ãããšã¯éåžžã«å°é£ã§ãã TensorBoardã°ã©ãã®èŠèŠåã¯ããã®ããã«ç¹å¥ã«äœæãããŸããã
ä¹ç®ã®çµæã決å®ããæ¹æ³ã¯ïŒ output_value
æäœããéå§ãããå¿
èŠããããŸãã ãããããã®æäœã¯å€æ°weight
äŸåããŸãã weight
ã®åæå€ã¯0.8ã§ããã¹ãã ãšç€ºããŸããããçŸåšã®ã»ãã·ã§ã³ã§ã¯ãŸã å€ãèšå®ãããŠããŸããã tf.initialize_all_variables()
颿°ã¯ããã¹ãŠã®å€æ°ïŒãã®å Žåã¯1ã€ã®ã¿ïŒãåæåããæäœãçæãããã®æäœãéå§ã§ããŸãã
>>> init = tf.initialize_all_variables() >>> sess.run(init)
tf.initialize_all_variables()
å®è¡çµæã«ã¯ã çŸåšã°ã©ãã«ãããã¹ãŠã®å€æ°ã®åæååãå«ãŸããŸãããã®ãããæ°ãã倿°ã远å ããå Žåã¯ã tf.initialize_all_variables()
å床å®è¡ããå¿
èŠããããŸãã simple init
ã«ã¯æ°ãã倿°ã¯å«ãŸããŸããã
ããã§ã output_value
æäœãéå§ããæºåãã§ããŸããã
>>> sess.run(output_value)
ãããã¯ã32ãããæµ®åå°æ°ç¹ãå«ã0.8 * 1.0ã§ããã32ãããæµ®åå°æ°ç¹ã¯æ°å€0.8ãã»ãšãã©çè§£ããŸãã ã 0.80000001ã®å€ã¯ãã§ããéãè¿ãå€ã§ãã
TensorBoardã§ã°ã©ããèŠã
ã°ã©ãã¯ãŸã éåžžã«åçŽã§ããããã€ã¢ã°ã©ã ã®åœ¢ã§è¡šçŸãèŠãã®ã¯è¯ãããšã§ãã TensorBoardã䜿çšããŠããã®ãããªãã£ãŒããçæããŸãã TensorBoardã¯ãåæäœã«ä¿åãããŠããååãã£ãŒã«ããèªã¿åããŸãïŒããã¯Python倿°åãšãŸã£ããåãã§ã¯ãããŸããïŒã ãããã®TensorFlowåã䜿çšããŠããã身è¿ãªPython倿°åã«é²ãããšãã§ããŸãã tf.mul
ã䜿çšããããšã¯ãäžèšã®äŸã§åã«*
ãä¹ç®ããããšãšåçã§ãããããã§ã¯æäœã®ååãèšå®ã§ããŸãã
>>> x = tf.constant(1.0, name='input') >>> w = tf.Variable(0.8, name='weight') >>> y = tf.mul(w, x, name='output')
TensorBoardã¯ãTensorFlowã»ãã·ã§ã³ããäœæãããåºåãã£ã¬ã¯ããªã調ã¹ãŸãã SummaryWriter
ã䜿çšããŠãã®åºåã«æžã蟌ãããšãã§ããŸãã1ã€ã®ã°ã©ã以å€ã«äœãããªããã°ã1ã€ã®ã°ã©ãã®ã¿ãæžã蟌ãŸããŸãã
SummaryWriter
äœæãããšãã®æåã®åŒæ°ã¯ãå¿
èŠã«å¿ããŠäœæãããåºåãã£ã¬ã¯ããªã®ååã§ãã
>>> summary_writer = tf.train.SummaryWriter('log_simple_graph', sess.graph)
ããã§ãã³ãã³ãã©ã€ã³ã§TensorBoardãå®è¡ã§ããŸãã
$ tensorboard --logdir=log_simple_graph
TensorBoardã¯ãããŒã6006ã§ããŒã«ã«Webã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ãããŸãïŒã6006ãã¯äžäžéã«ãgoogãã§ãïŒã localhost:6006/#graphs
ãã©ãŠã¶ãŒã«ç§»åãããšãTensorFlowã§äœæãããã°ã©ãã®ã°ã©ããèŠãããšãã§ããŸãã ç»å2ã®ããã«ãªããŸãã

ç»å2.æãåçŽãªTensorFlowãã¥ãŒãã³ã®TensorBoardã«ããèŠèŠåã
ãã¥ãŒãã³ãèšç·Žãã
ãã¥ãŒãã³ãäœæããŸããããã©ã®ããã«èšç·ŽããŸããïŒ å
¥åå€ã1.0ã«èšå®ããŸãã æ£ããæçµå€ããŒãã§ãããšããŸãã ã€ãŸããéåžžã«åçŽãªãã¬ãŒãã³ã°ããŒã¿ã»ãããããã1ã€ã®ç¹æ§ãæã€1ã€ã®äŸããããŸããå€ã¯1ãããŒã¯ã¯ãŒãã§ãã åäœããŒãã«å€æãããã¥ãŒãã³ãæãããã§ãã
ããã§ã·ã¹ãã ã¯1ãåãã0.8ãè¿ããŸãããããã¯æ£ããåäœã§ã¯ãããŸããã ã·ã¹ãã ãã©ãã»ã©ééã£ãŠãããã倿ããæ¹æ³ãå¿
èŠã§ãã ãã®ãšã©ãŒã®æž¬å®å€ããæå€±ããšåŒã³ãæå€±ãæå°éã«æããããã«ã·ã¹ãã ãèšå®ããŸãã æå€±ãè² ã®æ°ã«ãªãå¯èœæ§ãããå Žåãæå°åã¯æå³ããªããªããããæå€±ãçŸåšã®å
¥åå€ãšç®çã®åºåå€ã®å·®ã®2ä¹ãšããŠå®çŸ©ããŸãããã
>>> y_ = tf.constant(0.0) >>> loss = (y - y_)**2
ãã®æç¹ãŸã§ãã°ã©ãã«ã¯äœã調æ»ãããŠããŸããã ãã¬ãŒãã³ã°ã«ã¯ããªããã£ãã€ã¶ãŒãå¿
èŠã§ãã åŸé
éäžé¢æ°ã䜿çšããŠã埮åæå€±ã®å€ã«åºã¥ããŠéã¿ãæŽæ°ã§ããŸãã ãªããã£ãã€ã¶ãŒã¯ã次å
ã®æŽæ°ã管çããããã®ãã¬ãŒãã³ã°ã®ã¬ãã«ãèšå®ããå¿
èŠããããŸãã0.025ãèšå®ããŸãã
>>> optim = tf.train.GradientDescentOptimizer(learning_rate=0.025)
ãªããã£ãã€ã¶ãŒã¯éåžžã«ã¹ããŒãã§ãã 圌ã¯ããããã¯ãŒã¯å
šäœã®ã¬ãã«ã§å¿
èŠãªåŸé
ãèªåçã«æ€åºããŠäœ¿çšãããã¬ãŒãã³ã°ã®ããã®æ®µéçãªåŸéãè¡ãããšãã§ããŸãã
ç°¡åãªäŸã§ã°ã©ããŒã·ã§ã³ãã©ã®ããã«èŠãããèŠãŠã¿ãŸãããã
>>> grads_and_vars = optim.compute_gradients(loss) >>> sess.run(tf.initialize_all_variables()) >>> sess.run(grads_and_vars[1][0])
åŸé
å€ã1.6ãªã®ã¯ãªãã§ããïŒ æå€±å€ã¯äºä¹ãããå°é¢æ°ã¯èª€å·®ã«2ãæãããã®ã§ãã ããã§ãã·ã¹ãã ã¯0ã§ã¯ãªã0.8ãè¿ãããããšã©ãŒã¯0.8ã«ãªãã2ãæãããšã©ãŒã¯1.6ã«ãªããŸãã åäœããŸãïŒ
ããè€éãªã·ã¹ãã ã§ã¯ãTensorFlowããããã®åŸé
ãèªåçã«èšç®ããŠé©çšããããšãç¹ã«åœ¹ç«ã¡ãŸãã
ã°ã©ããŒã·ã§ã³ãé©çšããŠãããã¯ãããã²ãŒã·ã§ã³ãçµäºããŸãããã
>>> sess.run(optim.apply_gradients(grads_and_vars)) >>> sess.run(w)
æé©åããã°ã©ã ãåŸé
ãåãå»ãããã¬ãŒãã³ã°ã¬ãã«1.6 * 0.025ãæããŠãéã¿ãæ£ããæ¹åã«ç§»åãããããéã¿ã¯0.04æžå°ããŸããã
ãã®ããã«ãã³ãã«ã§ãªããã£ãã€ã¶ãå°ã代ããã«ãåŸé
ãèšç®ããŠé©çšããæäœãè¡ãããšãã§ããŸãïŒ train_step
ã
>>> train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss) >>> for i in range(100): >>> sess.run(train_step) >>> >>> sess.run(y)
ãã¬ãŒãã³ã°ã¹ããããäœåºŠãéå§ãããåŸãééãšæçµå€ã¯éåžžã«ãŒãã«è¿ããªããŸããã ãã¥ãŒãã³ã¯åŠç¿ããŸããïŒ
TensorBoardã®åŠç¿èšºæ
ãã¬ãŒãã³ã°äžã«äœãèµ·ãããã«èå³ããããããããŸããã ããšãã°ãåŠç¿ã®ãã¹ãŠã®ã¹ãããã§ã·ã¹ãã ãäºæž¬ãããã®ã远跡ããå¿
èŠããããŸãã ãµã€ã¯ã«ã®åã¹ãããã§å€ã衚瀺ã§ããŸãã
>>> for i in range(100): >>> print('before step {}, y is {}'.format(i, sess.run(y))) >>> sess.run(train_step) >>>
ããã¯æ©èœããŸãããããã€ãã®åé¡ããããŸãã æ°åã®ãªã¹ããçè§£ããããšã¯å°é£ã§ãã ã¹ã±ãžã¥ãŒã«ã®æ¹ãè¯ãã§ãããã åäžã®åºåå€ã§ããå€ãããŸãã ãããŠãå€ãã®å Žåãããã€ãã®å€ã远跡ããå¿
èŠããããŸãã ãŸããŸãäœç³»çã«èšé²ããŠãããšããã§ãããã
幞ããªããšã«ãã°ã©ããèŠèŠåããããã«ä»¥åã«äœ¿çšãããã®ãšåãã·ã¹ãã ã«ã¯ãå¿
èŠãªã¡ã«ããºã ãå«ãŸããŠããŸãã
ç¶æ
ãç°¡åã«èª¬æããæäœãèšç®ã°ã©ãã«è¿œå ããŸãã ç§ãã¡ã®å Žåãæäœã¯ããã¥ãŒãã³ã®çŸåšã®åºåã§ããy
ã®çŸåšã®å€ãå ±åããŸãã
>>> summary_y = tf.scalar_summary('output', y)
ãã®æäœãå®è¡ãããšããããã³ã«ãããã¡ãŒåœ¢åŒã®æååãè¿ãããŸããããã¯SummaryWriter
ã䜿çšããŠãã°ãã£ã¬ã¯ããªã«æžã蟌ãããšãã§ããŸãã
>>> summary_writer = tf.train.SummaryWriter('log_simple_stats') >>> sess.run(tf.initialize_all_variables()) >>> for i in range(100): >>> summary_str = sess.run(summary_y) >>> summary_writer.add_summary(summary_str, i) >>> sess.run(train_step) >>>
tensorboard --logdir=log_simple_stats
å®è¡ãããšã localhost:6006/#events
ããŒãžïŒç»å3ïŒã«ã€ã³ã¿ã©ã¯ãã£ããªã°ã©ãã衚瀺ãããŸãã

å³3.ãã¥ãŒãã³ã®åºåå€ãšãã¬ãŒãã³ã°ã®ååŸ©åæ°ã®TensorBoardã«ããèŠèŠåã
é²ã
ãããã³ãŒãã®æçµããŒãžã§ã³ã§ãã ããã»ã©å€ãã¯ãªããåéšåã¯TensorFlowã®æçšãªïŒãããŠæç¢ºãªïŒæ©èœã瀺ããŠããŸãã
import tensorflow as tf x = tf.constant(1.0, name='input') w = tf.Variable(0.8, name='weight') y = tf.mul(w, x, name='output') y_ = tf.constant(0.0, name='correct_value') loss = tf.pow(y - y_, 2, name='loss') train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss) for value in [x, w, y, y_, loss]: tf.scalar_summary(value.op.name, value) summaries = tf.merge_all_summaries() sess = tf.Session() summary_writer = tf.train.SummaryWriter('log_simple_stats', sess.graph) sess.run(tf.initialize_all_variables()) for i in range(100): summary_writer.add_summary(sess.run(summaries), i) sess.run(train_step)
ãã®äŸã¯ãMichael Nielsenã®Neural Networks and Deep Learningã®äŸãããããã«ç°¡åã§ãã å人çã«ã¯ããã®ãããªè©³çްã®ç ç©¶ã¯ãåçŽãªæ§æèŠçŽ ãåºç€ãšããŠäœ¿çšããããè€éãªã·ã¹ãã ãçè§£ããæ§ç¯ããã®ã«åœ¹ç«ã¡ãŸãã
TensorFlowã®å®éšãç¶ãããå Žåã¯ãããšãã°å¥ã®æŽ»æ§å颿°ã䜿çšããŠãããè峿·±ããã¥ãŒãã³ãäœæããããšããå§ãããŸãã ããè峿·±ãããŒã¿ã§ãã¬ãŒãã³ã°ãäœæã§ããŸãã ããã«ãã¥ãŒãã³ã远å ã§ããŸãã ããã«ã¬ã€ã€ãŒã远å ã§ããŸãã ããè€éãªæ¢è£œã®ã¢ãã«ã«é£ã³èŸŒãã ã ãç¬èªã®TensorFlowã® ããã¥ã¢ã«ãã¬ã€ãã®ç ç©¶ã«ãã£ãšæéãè²»ããããã§ããŸãã é 匵ã£ãŠïŒ