Nachdem ich mir diese Frage angesehen habe: Beim Versuch, die lineare Regression mit Keras zu emulieren , habe ich versucht, mein eigenes Beispiel nur zu Studienzwecken zu erstellen und meine Intuition zu entwickeln.
Ich habe einen einfachen Datensatz heruntergeladen und eine Spalte verwendet, um eine andere vorherzusagen. Die Daten sehen folgendermaßen aus:
Jetzt habe ich gerade ein einfaches Keras-Modell mit einer einzelnen linearen Ebene mit einem Knoten erstellt und darauf einen Gradientenabstieg ausgeführt:
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)
Wenn ich das Modell so laufen lasse, verliere ich nan
in jeder Epoche.
Also habe ich beschlossen, Dinge auszuprobieren und bekomme nur dann ein anständiges Modell, wenn ich eine lächerlich kleine Lernrate verwende sgd=keras.optimizers.SGD(lr=0.0000001)
:
Warum passiert das jetzt? Muss ich die Lernrate für jedes Problem, mit dem ich konfrontiert bin, manuell so einstellen? Mache ich hier etwas falsch Das soll das einfachste Problem sein, oder?
Vielen Dank!
quelle
Normalisierung ist wichtiger, wenn Sie mehr als eine abhängige Variable haben. Wenn Sie sich das Streudiagramm ansehen, sehen Sie Ausreißer. Ein neuronales Netz ohne versteckte Schichten ist dasselbe wie ein lineares Regressionsmodell. Somit passt es die beste Linie an, um den Abstand der Residuen zu minimieren. Entfernen Sie Ausreißer und es wird angemessener aussehen.
quelle