apprentissage d'une fonction avec Tensorflow, python
Salut à tous.
Je débute avec Tensorflow sur python. Après avoir copié et analysé un exemple du site de Tensorflow (histoire de comprendre un peu mieux comment ça marche), j'ai essayé de modifier le script. Le programme permet de créer un réseau neuronal qui retourne une fonction affine avec en entrée les coordonnées de plusieurs points. Jusque là, ça va.
Là où ça plante, c'est quand j'ai voulu adapter le programme pour que mon réseau de neurones me retourne une fonction du second degré :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
def Fonction(x_train = [1,2,3,4],y_train = [0,-1,-2,-3]):
# Model parameters
s = tf.Variable([.3], tf.float32)
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
# Model input and output
x = tf.placeholder(tf.float32)
linear_model = s * x*x + W * x + b
y = tf.placeholder(tf.float32)
# loss
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# training loop
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
sess.run(train, {x:x_train, y:y_train})
# evaluate training accuracy
curr_s, curr_W, curr_b, curr_loss = sess.run([s, W, b, loss], {x:x_train, y:y_train})
print("s: %s W: %s b: %s loss: %s"%(curr_s, curr_W, curr_b, curr_loss))
result = lambda x : round((curr_s*x*x+curr_W*x+curr_b).mean(),1)
return(result) |
Quand je tape "g = Fonction()" pour créer ma fonction, il m'affiche :
s: [ nan] W: [ nan] b: [ nan] loss: nan
puis quand je tape par exemple "g(2)", il m'affiche toujours "nan".
J'ai l'impression que le bug vient de la ligne 10:
Code:
linear_model = s * x*x + W * x + b
Quelqu'un sait-il pourquoi et ce que ça veut dire ?