Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018年01月27日 TensorFlowの計算グラフの理解

679 views

Published on

発表日:2018年01月27日
イベント名: AITCオープンラボ TensorFlow勉強会シリーズ2 成果報告会
イベントURL:http://aitc.jp/events/20180127-OpenLab/info.html
タイトル:TensorFlowの計算グラフの理解
発表者:吉田 裕之氏

TensorFlowによるニューラルネットワークの実装は、「計算グラフ」を構築
するコードの記述になります。
本発表では、TensorFlow利用の基礎知識として、計算グラフの考え方と仕組
みを解説します。

Published in: Internet
  • Be the first to comment

  • Be the first to like this

2018年01月27日 TensorFlowの計算グラフの理解

  1. 1. AITC TensorFlow勉強会シリーズ2 成果報告会 TensorFlowの 計算グラフの理解 2018年1月27日 富士通 吉田 TensorFlow, the TensorFlow logo and any related marks are trademarks of Google Inc. 1
  2. 2. TensorFlowの計算グラフ • TensorFlowでは、ニューラルネットワークを「計算グラフ」で表現 • 計算グラフ:「Tensorオブジェクト」をノードとする有向グラフ • Tensorオブジェクトの要素 • 名前、shape、dtype • Tensorの種類 • constant、operation、Variable、placeholder、他 • TensorとTensorを”演算”すると、実際に演算するのではなく、operation Tensorが作られる • 実際の演算は、Sessionを開始してから、runで実行する 2
  3. 3. 例1:constantとoperation import tensorflow as tf one = tf.constant(1, name="one") two = tf.constant(2, name="two") three = one + two print one print three with tf.Session() as sess: print sess.run([one, two, three]) // 出力結果 Tensor("one:0", shape=(), dtype=int32) Tensor("add:0", shape=(), dtype=int32) [1, 2, 3] 名前がone、値が1のconstant 名前がone、値が1のconstant :nは同じ名前に付ける通番 足し算するoperation、名前のデフォルトはadd Sessionを開始してrunする runで計算結果を得る 3
  4. 4. 例1:constantとoperation • 計算グラフ one two add • TensorBoardの表示 4
  5. 5. 例2:Variableとglobal_variables_initializer var5 = tf.Variable(5, name="var5") initializer = tf.global_variables_initializer() print var5 with tf.Session() as sess: initializer.run() print sess.run(var5) // 出力結果 <tf.Variable 'var5:0' shape=() dtype=int32_ref> 5 名前がvar5、初期値が5のVariable 全Variableの初期化を管理するoperation runで計算結果を得る 名前がvar5のVariable runする度に全Variableを初期化する 5
  6. 6. 例2:Variableとglobal_variables_initializer • 計算グラフ var5init • TensorBoardの表示 重なってるのは何かの偶然 6
  7. 7. 例3:Variableへの代入 assigned = tf.assign(var5,three+var5, name="assigned") print assigned mult = two * var5 with tf.Session() as sess: initializer.run() print sess.run(mult) print sess.run([assigned, mult]) print sess.run(mult) initializer.run() print sess.run(mult) // 出力結果 Tensor("assigned:0", shape=(), dtype=int32_ref) 10 // 2*5 [8, 10] // 3+5, 2*5 16 // 2*(3+5) 10 // 2*5 threeとvar5を足して、var5に代入するoperation • multだけrunするとassignは評価されない • run実行中は代入されない • run実行後に代入される • initializerで初期化される 7
  8. 8. 例3:Variableへの代入 • 計算グラフ var5init one two add add_1 • TensorBoardの表示 assignedmult 8
  9. 9. 例4:placeholderを使ったデータ入力 phold = tf.placeholder(tf.int32, name="phold") add3 = phold + three print phold with tf.Session() as sess: for n in range(0, 4): print sess.run(add3,{phold: n}) // 出力結果 Tensor("phold:0", dtype=int32) 3 4 5 6 7 名前がpholdのint32用のplaceholder 連想リストでplaceholderにデータを入れる 名前がpholdのint32用のplaceholder 9
  10. 10. 例4:placeholderを使ったデータ入力 • 計算グラフ one two add add_1 • TensorBoardの表示 phold 10
  11. 11. 例5:全結合(mnist) x = tf.placeholder(tf.float32, [None, 784], name="input") W = tf.Variable(tf.truncated_normal([784, 10], stddev=0.1), name="weight") b = tf.Variable(tf.zeros([10]), name="bias") y = tf.add(tf.matmul(x, W), b, name="logits") x * W + b バッチサイズ✕(28✕ 28)の入力 (28✕28)✕10の重みを正規分布で初期化 10個のバイアスを0で初期化 11
  12. 12. 例5:全結合(mnist) • 計算グラフ MatMul logits • TensorBoardの表示 input weight bias 12

×