2017-11-18 2 views
0

Ich versuche, eine sehr einfache lineare Regression mit tensorflow zu trainieren, aber der Verlust nicht abnimmt und die tensorboard sieht auch nicht richtigtensorflow - lineare Regression nicht geben Berechnungsgraphen bestimmt

### Generate data 
w_true = np.array([1.0,2.0]) 
b_true = 0.5 

x_train = np.random.multivariate_normal(mean=[0,0], cov=[[1,0],[0,1]], size=100) 
x_test = np.random.multivariate_normal(mean=[0,0], cov=[[3,0],[0,3]], size=100) 
y_train = np.dot(x_train,w_true) + b_true 
y_test = np.dot(x_test,w_true) + b_true 

### Placeholders for data input 
x = tf.placeholder(dtype=tf.float32, shape=[None,2], name="x") 
y = tf.placeholder(dtype=tf.float32, shape=[None], name="labels") 

### Trainable parameters 
w = tf.Variable(initial_value=np.random.multivariate_normal([0,0],[[1,0],[0,1]]), dtype=tf.float32, 
       name="W") 
b = tf.Variable(initial_value=np.random.normal(1), dtype=tf.float32,name="B") 

### Computational graph 
y_pred = tf.tensordot(x,w,1)+b 
tf.summary.histogram("weights",w) 
tf.summary.histogram("bias",b) 
loss = tf.reduce_sum(tf.squared_difference(y,y_pred), name="loss") 
tf.summary.scalar("loss", loss) 
with tf.name_scope("train"): 
    train_step = tf.train.GradientDescentOptimizer(0.00001).minimize(loss) 

### Training 
sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 

# For TensorBoard 
writer = tf.summary.FileWriter("path_to_some_folder") 
writer.add_graph(sess.graph) 

for t in range(1000): 
    x_batch = x_train[np.random.choice(100, 20)] 
    y_batch = y_train[np.random.choice(100, 20)] 
    sess.run(train_step, {x:x_batch,y:y_batch}) 

print(sess.run(loss, {x:x_train,y:y_train})) 
print(sess.run(loss, {x:x_test,y:y_test})) 

Ich habe versuchte verschiedene Schrittgrößen, aber der Fehler bleibt immer über 400 beim Training und 1000 beim Testset. Ich habe getestet, dass tf.tensordot() verhält sich wie ich es erwarte. Ich möchte Ihnen die tensorboard nur um zu sehen, die ersetzen path_to_some_folder und nach dem Training Lauf tensorboard --logdir path_to_some_folder

Vielen Dank für die Hilfe

Antwort

1

Ihr Problem wegen der folgenden zwei Zeilen ist,

x_batch = x_train[np.random.choice(100, 20)] 
y_batch = y_train[np.random.choice(100, 20)] 

In jedem Iteration, np.random.choice (100, 20) gibt zwei verschiedene Indexlisten für x_batch und y_batch zurück. Daher werden Ihre x_batch und y_batch nie übereinstimmen. Ersetzen Sie stattdessen diesen Teil durch den folgenden Code.

BATCH_SIZE= 10 
N_COUNT = len(x_train) 

for t in range(1000): 
    for start, end in zip(range(0, N_COUNT, BATCH_SIZE), 
          range(BATCH_SIZE, N_COUNT + 1,BATCH_SIZE)): 
     x_batch = x_train[start:end] 
     y_batch = y_train[start:end] 
     sess.run(train_step, {x:x_batch,y:y_batch}) 

Hoffe, das hilft.

Verwandte Themen