gocha124の日記

ごちゃごちゃ書きます

TensorFlowその2

TensorFlowをインストールして、続きにGetting Startd With TensorFlowを試しておいたのでメモ。

Getting Started With TensorFlow  |  TensorFlow

英語はよくワカらない・・・

 

TensorFlow Coreチュートリアル

Computional Graphは、固有名詞。

Computional Graphに、Tensor(0〜複数個)を入力して、出力のTensorを1つ得る。

 

API こんな機能
tf.contrib 開発中の機能が含まれる。将来変わる可能性がある
tf.constant() 定数のノードを作る
tf.add() ノードとノードを組み合わせる
tf.placeholder() 取り替えることができる記号を作る
tf.Variable() trainable(学習できる)なパラメータ
tf.global_variables_initializer() 変数を初期化する
loss function 損失関数
tf.square() 自乗(二乗)
tf.reduce_sum()  
tf.assign() trainableなパラメタに固定値をセット
tf.train.GradientDescentOptimizer(0.01) Gradient descent(最急降下法)での最適化アルゴリズム。 optimizer.minimize(loss)。

 

>>> node1 = tf.constant(3.0, dtype=tf.float32)

>>> node2 = tf.constant(4.0)

>>> print(node1, node2)

Tensor("Const_1:0", shape=(), dtype=float32) Tensor("Const_2:0", shape=(), dtype=float32)

>>> sess = tf.Session()

>>> print(sess.run([node1, node2]))

[3.0, 4.0]

>>> node3 = tf.add(node1, node2)

>>> print("node3: ", node3)

node3:  Tensor("Add:0", shape=(), dtype=float32)

>>> print("sess.run(node3): ",sess.run(node3))

sess.run(node3):  7.0

>>> a = tf.placeholder(tf.float32)

>>> b = tf.placeholder(tf.float32)

>>> adder_node = a + b # + provides a shortcut for tf.add(a, b)

>>> print(sess.run(adder_node, {a: 3, b:4.5}))

7.5

>>> print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))

[ 3.  7.]

>>> add_and_triple = adder_node * 3.

>>> print(sess.run(add_and_triple, {a: 3, b:4.5}))

22.5

>>> W = tf.Variable([.3], dtype=tf.float32)

>>> b = tf.Variable([-.3], dtype=tf.float32)

>>> x = tf.placeholder(tf.float32)

>>> linear_model = W * x + b

>>> init = tf.global_variables_initializer()

>>> sess.run(init)

>>> print(sess.run(linear_model, {x:[1,2,3,4]}))

[ 0.          0.30000001  0.60000002  0.90000004]

>>> y = tf.placeholder(tf.float32)

>>> squared_deltas = tf.square(linearmodel - y)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'linearmodel' is not defined

>>> squared_deltas = tf.square(linear_model - y)

>>> loss = tf.reduce_sum(squared_deltas)

>>> print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

23.66

>>> fixW = tf.assign(W, [-1.])

>>> fixb = tf.assign(b, [1.])

>>> sess.run([fixW, fixb])

[array([-1.], dtype=float32), array([ 1.], dtype=float32)]

>>> print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

0.0

>>> 

>>> 

>>> optimizer = tf.train.GradientDescentOptimizer(0.01)

>>> train = optimizer.minimize(loss)

>>> sess.run(init) # reset values to incorrect defaults.

>>> for i in range(1000):

...     sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})

... 

>>> print(sess.run([W, b]))

[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

 

 できた。