2017-01-02 9 views
3

Ich bin neu in Tensorflow und maschinelles Lernen. Ich habe versucht, die grundlegende Tensorflow example zu ändern, um Batch-Input nachzuahmen, konnte aber nicht konvergieren.Tensorflow konvergiert nicht mit nx1 Ganzzahleingabe (Spaltenvektor)

Wenn ich x_data so ändern, dass es innerhalb von [0,1] liegt, kann W richtig berechnet werden.

x_data = np.random.rand(numelements,1).astype(np.float32) 

Gibt es etwas falsch mit meinem Code? Hier ist eine Kopie:

import tensorflow as tf 
import numpy as np 

# number of training samples 
numelements = 100 

# define input, and labled values 
# note the inptu and output are actually scalar value 
#x_data = np.random.rand(numelements,1).astype(np.float32) 
x_data = np.random.randint(0, 10, size=(numelements,1)).astype(np.float32) 
y_data = x_data * 10 

# Try to find values for W and b that compute y_data = W * x + b 
x = tf.placeholder(tf.float32, [None, 1]) 
W = tf.Variable(tf.zeros([1])) 
b = tf.Variable(tf.zeros([1])) 
y = tf.mul(x, W) + b 

# Minimize the mean squared errors. 
loss = tf.reduce_mean(tf.square(y - y_data)) 
optimizer = tf.train.GradientDescentOptimizer(0.5) 
train = optimizer.minimize(loss) 

# Before starting, initialize the variables. We will 'run' this first. 
init = tf.global_variables_initializer() 

# Launch the graph. 
sess = tf.Session() 
sess.run(init) 

# Fit the line. 
for step in range(81): 
sess.run(train, feed_dict={x: x_data}) 
if step % 20 == 0: 
    print(step, sess.run(W), sess.run(b)) 

Antwort

0

Mein Freund half mir herauszufinden, dass meine Gradient Descent Trainingsrate zu hoch ist. Mit Tipps in diesem post kann ich deutlich sehen, dass der Verlust immer größer wird und schließlich überläuft.

Ich änderte die Lernrate auf 0,005 und es begann zu konvergieren.

Verwandte Themen