2017-10-15 9 views
0

Je suis un débutant de keras. Quand j'applique la régression linéaire, je rencontre une perte de nan, qui m'obsède beaucoup. Je mets mon code source ci-dessous:Mise en œuvre de la régression linéaire en utilisant keras résultant nan perte

from keras.layers import Dense,Activation 
from keras.models import Sequential 
import numpy as np 
model = Sequential() 
model.add(Dense(1,input_shape=(1,))) 
model.add(Activation('linear')) 
model.compile(loss='mse',optimizer='sgd',metrics=['mse']) 
x = np.linspace(1,100,1e3) 
y = 3*x + 1 + np.random.normal(size=x.shape) 
model.fit(x,y,batch_size=100) 

Ensuite, la sortie de perte est nan. Mais quand je change les données de formation, le code correspondant est:

x = np.linspace(1,10,1e3) 

tout va bien, ce qui finalement je peux obtenir le w approximativement 3,0 et b approximation 1. Tout le monde sait pourquoi cela se passerait-il? Merci d'avance.

Répondre

0

Le problème est que x = np.linspace(1,100,1e3) vous donnera 1000 numéros avec des valeurs de 1 à 100. Imaginez tous ces chiffres, multiplié par une valeur aléatoire w pour créer votre prédiction (x * w), puis au carré et additionnées pour obtenir la valeur de la perte avec la fonction MSE. Le nombre est si grand qu'il déborde, passant de inf à nan.

Une bonne pratique est de garder vos données avec une moyenne 0,0 et une faible variance (par exemple 1)

Dans ce cas, une solution facile sera de diviser vos données en 100 comme ceci:

x = np.linspace(1,100,1e3)/100