Tensorflowメモ【随時更新】

  • 3
    いいね
  • 0
    コメント

Tensorfowメモ

自分なりに書き残しているメモです

Tensorflowの構造

グラフ、演算ノード、テンソルの構想

グラフとは?

複数のニューロンからなる一つの層を表す図形
φ(X * W + b)

ノードとノードを結ぶ辺によって構成
演算ノード・変数ノード・プレスホルダーノードなどが存在

テンソルとは

グラフを流れる量

テンソルはn次元の配列あるいはリスト

主な表記

変数 tf.Variable
行列の積 tf.matmul
φの適用 tf.nn.relu

グラフの定義

graph.py
# Wを入れる変数の定義
weights = tf.Variable()
# bを入れる変数の定義 
bias = tf.Variable()
# 層の働きを φ(X*W+b) で定義
#ここではφはreluを使用
#imagesは、この層が受ける入力
#hidden1はこの層の出力

#1層目
hidden1 = tf.nn.relu(tf.matmul(images, weights) + bias)

#2層目
hidden2 = tf.nn.relu(tf.matmul(hidden1,weights) + bias)
#images, weights, bias, hidden1はいずれもテンソル

変数定義

変数の初期化

init.py
w = tf.Variable(tf.random_norml([784, 200], stddev = 0.35), name = "weights")
b  =tf.Variable(tf.zeros([200], name = "biases")

#この変数を初期化する演算
#注意!ここではまだ実行されずノードが追加されただけである。
init_op = tf.initialize_all_variables()


#モデルを起動したあとで、この初期化を呼び出す
#定義したモデルはSessionで初めて動く。
#呼び出しには run を使用
with tf.Session() as sess:
    # Run the init operation.
    sess.run(init_op)




**変数の保存とリストア

save.py
#変数を作る
v1 = tf.variable(..., name = "v1")
v2 = tf.variable(..., name = "v2")

#変数を初期化する init_opノード
init_op = tf.initalize_all_variables()
#すべての変数をsave, restoreするsaveノードの追加
saver = tf.train.Saver()

#モデルを起動し、変数を初期化し、何かの仕事をしたあとで
#変数をディスクにsaveする
with tf.Session() as sess:
  sess.run(init_op)
  #モデルで何かの仕事をする
  ##########

  #変数をディスクにsaveする
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Modef saved in file: %s" % save_path)

  #変数のrestore
  saver.retore(sess, "/tmp/model.ckpt")
  print ("Modell restored")

パラメータの最適化(訓練)

パラメータ(重みとバイアス)の最適化

  1. グラフを組んで、そのグラフで入力データで出力を計算
  2. 出力結果を正しい答えと比較。比較には損失関数を用いる
  3. Gradient Descent(勾配降下法)を使って、損失関数の値を小さく修正する
  4. 新しいパラメータで出力を計算。損失関数が小さくなるまで繰り返す

主な関数

GradientDescentOptimizer()

パラメータ最適化のための最適化演算。このOptimizerを使って損失関数を最適化

opt.py

###数値予測の場合###
 loss = tf.reduce_mean(tf.square(y - y_data))
#学習率0.5で勾配降下
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

###クラス分けの場合###
y_ = tf.placeholder("float", [None , 10])
cross_enttopy = -tf.reduce_sum(y_ * tf.log(y))
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(cross_entropy)