2017-11-30 4 views
0
import tensorflow as tf 

M = tf.Variable([0.01],tf.float32) 
b = tf.Variable([1.0],tf.float32) 

#inputs and outputs 

x = tf.placeholder(tf.float32) 
y = tf.placeholder(tf.float32) # actual value of y which we already know 

Yp = M * x + b # y predicted value 

#loss 

squareR = tf.square(Yp - y) 
loss = tf.reduce_sum(squareR) 

#optimize 

optimizer = tf.train.GradientDescentOptimizer(0.01) 
train = optimizer.minimize(loss) 

init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 

for i in range(1000): 
    sess.run(train,{x:[1,2,3,4,5],y:[1.9,2.4,3.7,4.9,5.1]}) 
print(sess.run([M,b])) 

Ausganglineare Regression unter Verwendung tensorflow

[array([ 0.88999945], dtype=float32), array([ 0.93000191], dtype=float32)] 

Problem: wenn ich die Werte von x am ändert und y zu

x:[100,200,300,400,500],y:[19,24,37,49,51] 

dann ist der Ausgang:

[array([ nan], dtype=float32), array([ nan], dtype=float32)] 

bitte helfen Sie mir, Hang und y-Achsenabschnitt des linearen Modells.

Antwort

0

einige Druck-Anweisungen zur Ausbildung Schleife hinzugefügt haben, können wir sehen, was während des Trainings vor sich geht:

for i in range(1000): 
    _, mm, bb = sess.run([train,M,b],{x:[100,200,300,400,500],y:[19,24,37,49,51]}) 
    print(mm, bb) 
    if np.isnan(mm): 
     break 
print(sess.run([M,b])) 

Der Ausgang:

[ 1118.01000977] [ 4.19999981] 
[-12295860.] [-33532.921875] 
[ 1.35243170e+11] [ 3.68845632e+08] 
[ -1.48755065e+15] [ -4.05696309e+12] 
[ 1.63616896e+19] [ 4.46228634e+16] 
[ -1.79963571e+23] [ -4.90810521e+20] 
[ 1.97943407e+27] [ 5.39846559e+24] 
[ -2.17719537e+31] [ -5.93781625e+28] 
[ 2.39471499e+35] [ 6.53105210e+32] 
[-inf] [-inf] 
[ nan] [ nan] 

Dieser Ausgang bedeutet, dass Ihre Ausbildung divergiert. In diesem Fall ist das Verringern der Lernrate einer der möglichen Ansätze, um das Problem zu beheben.

Senkung der Lernrate zu 0.000001 Werke, dies sind die gelernt M und b nach 1000 Iterationen:

[array([ 0.11159456], dtype=float32), array([ 1.01534212], dtype=float32)] 
+1

Vielen Dank ... Es funktionierte ... –

+0

Aber die Steigung und y-Achse sind falsch. Die Werte von M = 0.089 und b = 9.3 –

+0

benötigen möglicherweise mehr als 1000 Schritte für das Training, oder sie könnten in einer suboptimalen Lösung gelandet sein, da die Lernrate extrem langsam ist. Versuchen Sie, den Optimierer und/oder die Parameter zu ändern, aber das ursprüngliche Problem war die Divergenz des Optimierers, die auftritt, wenn der LR zu groß ist. – GPhilo

Verwandte Themen