Je suis nouveau à l'apprentissage automatique et Tensorflow. Actuellement, j'essaie de suivre la logique du tutoriel pour créer un modèle de régression linéaire simple de forme y = a * x (il n'y a pas de terme de biais ici). Cependant, pour une raison quelconque, le modèle ne parvient pas à converger vers la valeur correcte "a". L'ensemble de données est créé par moi dans Excel. Comme indiqué ci-dessous:La régression linéaire simple a échoué à converger dans tensorflow
voici mon code qui tente d'exécuter tensorflow sur cet ensemble de données fictives I généré.
import tensorflow as tf
import pandas as pd
w = tf.Variable([[5]],dtype=tf.float32)
b = tf.Variable([-5],dtype=tf.float32)
x = tf.placeholder(shape=(None,1),dtype=tf.float32)
y = tf.add(tf.matmul(x,w),b)
label = tf.placeholder(dtype=tf.float32)
loss = tf.reduce_mean(tf.squared_difference(y,label))
data = pd.read_csv("D:\\dat2.csv")
xs = data.iloc[:,:1].as_matrix()
ys = data.iloc[:,1].as_matrix()
optimizer = tf.train.GradientDescentOptimizer(0.000001).minimize(loss)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
for i in range(10000):
sess.run(optimizer,{x:xs,label:ys})
if i%100 == 0: print(i,sess.run(w))
print(sess.run(w))
ci-dessous est l'impression dans la console ipython, comme vous pouvez le voir après itération 10000e, la valeur w est d'environ 4,53 au lieu de la valeur correcte 6. J'apprécierais vraiment si quelqu'un pouvait faire la lumière sur qu'est-ce qui ne va pas ici? J'ai joué avec différents taux d'apprentissage de 0,01 à 0,0000001, aucun des paramètres ne peut faire converger le w à 6. J'ai lu certains suggérant de normaliser la fonctionnalité à la distribution normale standard, je voudrais savoir si cette normalisation est un indispensable? sans normalisation, gradientdescent n'est pas capable de trouver la solution? Merci beaucoup!
si le 'randbetween' a passé 0 et 0,1 au lieu de -2, 2? –
Votre taux d'apprentissage est trop faible. Combien de valeurs différentes avez-vous? (combien de lignes dans votre Excel?). Si ce nombre est trop petit cela peut être un problème ... Vous devriez pouvoir converger sans aucune normalisation si vous avez assez de données (et avec une gamme assez grande) – gdelab
@gdelab l'ensemble de données contient environ 160 points de données. J'ai joué avec des taux d'apprentissage beaucoup plus élevés comme 0,1 ou même 1, mais en vain. Je pensais qu'en itérant 10000 fois, le modèle devrait toujours pouvoir converger – Rookie