2016-05-17 20 views
4

Ich bin ein Anfänger im maschinellen Lernen und Tensorflow. Im ersten Schritt versuchte ich den Tensorflow und versuchte eine einfache multivariate lineare Regression. Es scheint jedoch, dass das Modell auf einem lokalen Minimum festsitzt. Hier ist mein Code.Tensorflow auf einfache lineare Regression

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt 

def weight_variable(shape): 
    initial = tf.truncated_normal(shape, stddev=1) 
    return tf.Variable(initial) 

# dataset 
xx = np.random.randint(0,1000,[1000,3])/1000. 
yy = xx[:,0] * 2 + xx[:,1] * 1.4 + xx[:,2] * 3 

# model 
x = tf.placeholder(tf.float32, shape=[None, 3]) 
y_ = tf.placeholder(tf.float32, shape=[None]) 
W1 = weight_variable([3, 1]) 
y = tf.matmul(x, W1) 

# training and cost function 
cost_function = tf.reduce_mean(tf.square(y - y_)) 
train_function = tf.train.AdamOptimizer(1e-2).minimize(cost_function) 

# create a session 
sess = tf.Session() 

# train 
sess.run(tf.initialize_all_variables()) 
for i in range(10000): 
    sess.run(train_function, feed_dict={x:xx, y_:yy}) 
    if i % 1000 == 0: 
     print(sess.run(cost_function, feed_dict={x:xx, y_:yy})) 

Der Ausgang ist:

14.8449 
2.20154 
2.18375 
2.18366 
2.18366 
2.18366 
2.18366 
2.18366 
2.18366 

Der Ausgangswert (yy) von 0 bis 6 ist, so mittlere quadratische Fehler mit 2,18 beträchtlich groß, wohl wissend, dass es kein Rauschen zu dem zugegebenen Datensatz. Ich habe auch GradientDescentOptimizer mit Lernrate 0.1 und 1e-2 versucht, aber es verbessert die Ergebnisse nicht viel.

Ist irgendetwas mit meiner Implementierung falsch?

+0

ich sehe nicht, error_function de in Ihrem Code bestraft. Ist das gleich wie Kosten_Funktionen? Hast du versucht, deine Lernrate zu senken? – shekkizh

+0

Sorry, ich meinte 'cost_function'. Ich habe es repariert. Danke für deinen Kommentar. – Firman

Antwort

5

Dies ist, weil y nicht die gleiche Form wie y_ ist. y ist von Form (1000, 1) und y_ ist von Form (1000). Wenn Sie sie also subtrahieren, erstellen Sie versehentlich eine 2-D-Matrix.

Um es zu beheben Ihre Kostenfunktion ändern:

cost_function = tf.reduce_mean(tf.square(tf.squeeze(y) - y_)) 
-2

Wie in einer anderen Antwort erwähnt, u haben

predictions = tf.add(b, tf.matmul(x, w)) 
error = tf.reduce_mean(tf.square(y - predictions)) 

verwenden und wie Sie sagen, dass, Sie sind ein Tensorflow Anfänger, Sie können hier am Beispiel aussehen: -

https://medium.com/@saxenarohan97/intro-to-tensorflow-solving-a-simple-regression-problem-e87b42fd4845

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18667877) – Liam

+0

ok, ich habe meine Antwort bearbeitet –

Verwandte Themen