LoginSignup
4
2

More than 5 years have passed since last update.

Tensorflowメモ【随時更新】

Last updated at Posted at 2017-02-15

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)



4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2