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")
パラメータの最適化(訓練)
パラメータ(重みとバイアス)の最適化
- グラフを組んで、そのグラフで入力データで出力を計算
- 出力結果を正しい答えと比較。比較には損失関数を用いる
- Gradient Descent(勾配降下法)を使って、損失関数の値を小さく修正する
- 新しいパラメータで出力を計算。損失関数が小さくなるまで繰り返す
主な関数
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)