Après avoir regardé cette question: en essayant d'émuler la régression linéaire en utilisant Keras , j'ai essayé de rouler mon propre exemple, juste à des fins d'étude et pour développer mon intuition.
J'ai téléchargé un simple ensemble de données et utilisé une colonne pour en prédire une autre. Les données ressemblent à ceci:
Maintenant, je viens de créer un modèle de kéros simple avec une seule couche linéaire à un nœud et j'ai procédé à une descente en gradient sur celui-ci:
from keras.layers import Input, Dense
from keras.models import Model
inputs = Input(shape=(1,))
preds = Dense(1,activation='linear')(inputs)
model = Model(inputs=inputs,outputs=preds)
sgd=keras.optimizers.SGD()
model.compile(optimizer=sgd ,loss='mse',metrics=['mse'])
model.fit(x,y, batch_size=1, epochs=30, shuffle=False)
Faire tourner le modèle comme ça me fait nan
perdre à chaque époque.
J'ai donc décidé de commencer à essayer des trucs et je n'obtiens un modèle décent que si j'utilise un taux d'apprentissage ridiculement petit sgd=keras.optimizers.SGD(lr=0.0000001)
:
Maintenant, pourquoi cela se produit-il? Dois-je régler manuellement le taux d'apprentissage comme celui-ci pour chaque problème que je rencontre? Est-ce que je fais quelque chose de mal ici? C'est censé être le problème le plus simple possible, non?
Merci!
la source
La normalisation est plus importante lorsque vous avez plusieurs variables dépendantes. Si vous regardez le nuage de points, vous pouvez voir des valeurs aberrantes. Un réseau neuronal sans couches cachées est identique à un modèle de régression linéaire. Ainsi, il s'adapte à la meilleure ligne pour minimiser la distance des résidus. Supprimez les valeurs aberrantes et cela semblera plus approprié.
la source