下記コードで勾配降下法で定数a,b,cの近似値を求めようと考えています。
追記:描きコードに酒精したところ動作はしましたが、勾配降下方による予測値は期待値の半分程度の値をとっています。cはゼロ値になっており収束してゼロなのかこれから確認します。
lang
1# Imports 2import tensorflow as tf 3import numpy as np 4import xlrd 5 6# Gradient Update Rate 7gradient_rate=0.001 8 9# Placeholders 10Ta = tf.placeholder(tf.float32, name='Ta') 11Tb = tf.placeholder(tf.float32, name='Tb') 12 13a = tf.Variable(tf.zeros([1, 1])) 14b = tf.Variable(tf.zeros([1, 1])) 15c = tf.Variable(tf.zeros([1, 1])) 16 17def inference(Ta, Tb): 18 Z = (a * Ta + b) * tf.exp(Tb - c * Ta) 19 return Z 20 21def loss(logit, label): 22 loss = tf.reduce_mean(tf.square(logit - label)) 23 return loss 24 25def training(loss, gradient_rate): 26 optimizer = tf.train.GradientDescentOptimizer(gradient_rate) 27 train_op = optimizer.minimize(loss) 28 return train_op 29 30# Read Excel File 31book = xlrd.open_workbook('test.xlsx') 32sheet = book.sheet_by_index(0) 33 34# Model Processing 35for i in range(sheet.ncols): 36 Ta = float(sheet.cell_value(i, 0)) 37 Tb = float(sheet.cell_value(i, 1)) 38 print("%d: Ta: %f, Tb: %f" % (i, Ta, Tb)) 39 40 # Inference Model. 41 logit = inference(Ta, Tb) 42 43 label = float(sheet.cell_value(i, 2)) 44 45 # Loss Calculation. 46 loss = loss(logit, label) 47 48 train_op = training(loss, gradient_rate) 49 50# Model Running 51sess = tf.Session() 52sess.run(tf.global_variables_initializer()) 53sess.run(logit) 54sess.run(loss) 55sess.run(train_op) 56 57print(sess.run(a), sess.run(b), sess.run(c))
SDGでもバッチでも良いのですが、エラー:
ValueError: No variables to optimize.
がどういう意図のメッセージなのか理解できていません。現状SGDのコードになっていることは理解できていますが、書き方の正しさは分かっていません。
そもそもplaceholderを使うべきかもよく分かっていません。
Model runningの部分は自分でも間違っている気がしています。
forループの初回で上記エラーが"train_op = optimizer.minimize(loss)"で発生しています。
このような状況ですが、このコード上何が間違っているかをSGDとバッチの両方の面から指摘していただけると助かります。宜しくお願い致します。
トレースバックを下記に示します。
入力値TaとTbに対する期待値は例えば、下記の場合12.855です。
lang
1>>>> Ta <<<< 213.521899999999986 3>>>> Tb <<<< 456.5643 5>>>> LOGIT <<<< 6Tensor("mul_2:0", dtype=float32) 7>>>> LOSS <<<< 8Tensor("Mean:0", dtype=float32) 9Traceback (most recent call last): 10 File "fitting_question.py", line 53, in <module> 11 train_op = training(loss, gradient_rate) 12 File "fitting_question.py", line 25, in training 13 train_op = optimizer.minimize(loss) 14 File "//anaconda/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 279, in minimize 15 grad_loss=grad_loss) 16 File "//anaconda/lib/python3.5/site-packages/tensorflow/python/training/optimizer.py", line 339, in compute_gradients 17 raise ValueError("No variables to optimize.") 18ValueError: No variables to optimize.
lang
1# Imports 2import tensorflow as tf 3import numpy as np 4import xlrd 5 6# Gradient Update Rate 7gradient_rate=0.001 8 9# Placeholders 10Ta = tf.placeholder(tf.float32, name='Ta') 11Tb = tf.placeholder(tf.float32, name='Tb') 12 13a = tf.placeholder(tf.float32, name='a') 14b = tf.placeholder(tf.float32, name='b') 15c = tf.placeholder(tf.float32, name='c') 16 17def inference(Ta, Tb): 18 Z = (a * Ta + b) * tf.exp(Tb - c * Ta) 19 return Z 20 21def loss(logit, label): 22 loss = tf.reduce_mean(tf.square(logit - label)) 23 return loss 24 25def training(loss, gradient_rate): 26 optimizer = tf.train.GradientDescentOptimizer(gradient_rate) 27 train_op = optimizer.minimize(loss) 28 return train_op 29 30# Read Excel File 31book = xlrd.open_workbook('test.xlsx') 32sheet = book.sheet_by_index(0) 33 34# Model Processing 35for i in range(sheet.ncols): 36 Ta = float(sheet.cell_value(i, 0)) 37 Tb = float(sheet.cell_value(i, 1)) 38 print(">>>> Ta <<<<") 39 print(Ta) 40 41 print(">>>> Tb <<<<") 42 print(Tb) 43 44 # Inference Model. 45 logit = inference(Ta, Tb) 46 print(">>>> LOGIT <<<<") 47 print(logit) 48 49 label = float(sheet.cell_value(i, 2)) 50 51 # Loss Calculation. 52 loss = loss(logit, label) 53 print(">>>> LOSS <<<<") 54 print(loss) 55 56 train_op = training(loss, gradient_rate) 57 58# Model Running 59with tf.Graph().as_default(): 60 sess = tf.Session() 61 sess.run(tf.global_variables_initializer()) 62 sess.run(train_op) 63 64 print(sess.run(a), sess.run(b), sess.run(c))
回答3件
あなたの回答
tips
プレビュー