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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
linear_model = s * x*x + W * x + b
Quelqu'un sait-il pourquoi et ce que ça veut dire ?