2017-08-24 6 views
0
import tensorflow as tf 

# Model parameters 
A = tf.Variable([.3], dtype=tf.float32) 
W = tf.Variable([.3], dtype=tf.float32) 
b = tf.Variable([-.3], dtype=tf.float32) 
# Model input and output 
x = tf.placeholder(tf.float32) 
q_model = A * (x**2) + W * x + b 
y = tf.placeholder(tf.float32) 

# loss 
loss = tf.reduce_sum(tf.square(q_model - y)) # sum of the squares 
# optimizer 
optimizer = tf.train.GradientDescentOptimizer(0.01) 
train = optimizer.minimize(loss) 

# training data 
x_train = [0, 1, 2, 3, 4] 
y_train = [0, 1, 4, 9, 16] 
# training loop 
init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) # reset values to wrong 
for i in range(1000): 
    sess.run(train, {x: x_train, y: y_train}) 

# evaluate training accuracy 
curr_A, curr_W, curr_b, curr_loss = sess.run([A, W, b, loss], {x: x_train, y: y_train}) 
print("A: %s W: %s b: %s loss: %s"%(curr_A, curr_W, curr_b, curr_loss)) 

tfはモデルコードを入力して線形回帰を実行します。しかし、私は二次回帰をすることができるかどうかを見て回りたいと思っていました。そうするために、私はtf.Variable Aを追加し、それをモデルに入れて、それが値として得たものを教えて出力を修正しました。ここですべてのTensorflow出力がナノです。

結果は以下のとおりです。

A: [ nan] W: [ nan] b: [ nan] loss: nan 

y'allのは、ここでの問題は何だと思いますか?椅子とキーボードの間にありますか?

答えて

0

A,Wおよびbの値を各繰り返しで印刷すると、それらの値が交互になる(つまり、正の値と負の値が交互に表示される)ことがわかります。これは多くの場合、学習率が高いためです。あなたの例では、およそ0.001に学習率を減らすことによって、この動作を修正することができるはずです。

optimizer = tf.train.GradientDescentOptimizer(0.001) 

この学習率でAは1とWに傾向があり、bがする傾向が見られた一方で、私は、減少の損失を達成期待通りにゼロ。

A: [ 0.7536] W: [ 0.42800003] b: [-0.26100001] loss: 7.86113 
A: [ 0.8581112] W: [ 0.45682004] b: [-0.252166] loss: 0.584708 
A: [ 0.88233441] W: [ 0.46283191] b: [-0.25026742] loss: 0.199126 
... 
A: [ 0.96852171] W: [ 0.1454313] b: [-0.11387932] loss: 0.0183883 
A: [ 0.96855479] W: [ 0.14527865] b: [-0.11376046] loss: 0.0183499 
A: [ 0.96858788] W: [ 0.14512616] b: [-0.11364172] loss: 0.0183113 
A: [ 0.9686209] W: [ 0.14497384] b: [-0.1135231] loss: 0.0182731 
関連する問題