Was ist die definition eines nicht-trainierbare parameter?
Was ist die definition von nicht trainierbar parameter in einem Modell?
Zum Beispiel, während Sie den Aufbau Ihrer eigenen Modell, dessen Wert 0 ist als default, aber wenn Sie verwenden möchten, ein inception-Modell, es ist immer etwas anderes, anstatt 0. Was wäre der Grund dahinter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht-trainierbare Parameter sind Recht breit gefächertes Thema. Eine einfache Beispiel betrachten wir den Fall einer bestimmten NN-Modell und seine Architektur.
Sagen, wir haben bereits die setup-Ihr Netzwerk-definition in Keras, und Ihre Architektur ist so etwas wie
256->500->500->1
. Basierend auf dieser definition, die wir zu haben scheinen, eine Regression-Modell (ein Ausgang) mit zwei versteckten Schichten (500 Knoten) und einer Eingabe von 256.Einer nicht-trainierbare Parameter des Modells ist, zum Beispiel, die Anzahl der versteckten Schichten selbst (2). Anderen könnte die Knoten auf jede versteckte Schicht (500 in diesem Fall), oder auch die Knoten auf den einzelnen Ebenen, indem Sie einen parameter pro Schicht und die Anzahl der Schichten selbst.
Diese Parameter sind "nicht trainierbar", weil kann man nicht optimieren Sie Ihren Wert durch Ihre Trainingsdaten. Ausbildung-algorithmen (wie z.B. back-propagation) optimieren und aktualisieren des GEWICHTE von Ihrem Netzwerk, die die tatsächliche trainierbare Parameter, die hier (meist mehrere tausend, je nach verbindungen). Ihre Trainingsdaten, wie es ist, nicht helfen kann, Sie feststellen, diejenigen, die nicht trainierbar Parameter.
Jedoch dies bedeutet nicht, dass
numberHiddenLayers
ist nicht trainierbar, es bedeutet nur, dass in dieses Modell und seine Umsetzung sind wir nicht in der Lage, dies zu tun. Wir könntennumberHiddenLayers
trainierbar; der einfachste Weg wäre zu definieren anderen ML-Algorithmus, nimmt dieses Modell als Eingabe und Züge mit mehreren WertennumberHiddenLayers
. Den besten Wert erhalten, mit dem Modell, besser als der andere, also der Optimierung dernumberHiddenLayers
variable.In anderen Worten, nicht-trainierbare Parameter des Modells sind diejenigen, die Sie werden nicht aktualisiert und optimiert, während der Ausbildung, und müssen definiert werden a priori, weitergegeben oder als Eingänge.
In keras, nicht trainierbar Parameter (wie gezeigt in
model.summary()
) bedeutet, dass die Anzahl der GEWICHTE, die nicht aktualisiert, während das training mit backpropagation.Gibt es hauptsächlich zwei Arten von nicht-trainierbarer GEWICHTE:
GEWICHTE sind die Werte innerhalb des Netzwerks, die die Operationen durchführen und kann angepasst werden, um das Ergebnis in das, was wir wollen. Der backpropagation Algorithmus-änderung der GEWICHTE in Richtung einer niedrigeren Fehler am Ende.
Standardmäßig, alle GEWICHTE in einem keras Modell sind trainierbar.
Wenn Sie Ebenen erstellen, die intern erzeugt es seine eigenen GEWICHTE und Sie sind trainierbar. (Der backpropagation Algorithmus-update diese GEWICHTE)
Wenn du Sie nicht auszubilden, der Algorithmus wird nicht aktualisiert, diese GEWICHTE mehr. Dies ist zum Beispiel hilfreich, wenn Sie möchten, dass ein convolutional layer mit einem bestimmten filter, wie ein Sobel-filter, zum Beispiel. Sie wollen nicht die Ausbildung ändern, diesen Vorgang, so dass diese GEWICHTE/Filter sollte konstant gehalten werden.
Gibt es eine Menge anderer Gründe, warum möchten Sie vielleicht, um GEWICHTE nicht auszubilden.
Changing-Parameter:
Für die Entscheidung, ob die GEWICHTE sind trainierbar oder nicht, nehmen Sie Ebenen aus dem Modell und legen Sie
trainable
:Muss getan werden vor der Kompilierung.
Gibt es einige details, die andere Antworten nicht decken.
In Keras, nicht-trainierbare Parameter sind diejenigen, die sind nicht geschult mit gradient descent. Dies ist auch gesteuert durch die
trainable
parameter in jeder Schicht, zum Beispiel:Diese Drucke null trainierbare Parameter, und 1010 nicht-trainierbare Parameter.
Nun, wenn Sie den layer als trainierbar mit
model.layers[0].trainable = True
dann druckt es:Nun alle Parameter sind trainierbar und es gibt keine nicht-trainierbare Parameter. Aber es gibt auch Schichten, die sowohl in trainierbare und nicht-trainierbare Parameter, ein Beispiel ist der
BatchNormalization
Schicht, wobei der Mittelwert und die Standardabweichung der Aktivierungen ist für die Verwendung gespeichert, während die test-Zeit. Ein Beispiel:Diesem speziellen Fall BatchNormalization hat 40 Parameter in insgesamt 20 trainierbar, und 20 nicht trainierbar. Die 20 nicht-trainierbare Parameter entsprechen den berechneten Mittelwert und die Standardabweichung von den Aktivierungen, die während der test-Zeit, und diese Parameter werden nie trainierbar mit gradient descent, und sind nicht betroffen von der
trainable
Flagge.Ist es klar, dass, wenn Sie frieren jede Ebene des Netzwerks. alle Parameter auf, die gefrorenen Schicht wiederum nicht trainierbar. Auf der anderen Seite, wenn Sie entwerfen Ihr Netzwerk von Grund auf neu, es könnten auch einige nicht-trainierbare Parameter zu. Zum Beispiel batchnormalization Ebene hat 4 parameter, die;
[gamma weights, beta weights, moving_mean, moving_variance]
Den ersten zwei von Ihnen sind trainierbar, aber die letzten beiden nicht. Also die batch-Normalisierung Schicht ist sehr wahrscheinlich der Grund dafür, dass Sie Ihre eigene Netzwerk ist nicht trainierbar paramteres.
In jedem Modell, das wir definieren, gibt es Parameter und dann gibt es hyperparameters. Parameter, die hauptsächlich aus der Gewichtungen und Verzerrungen, während die hyperparameters besteht aus Anzahl der Filter, filter Größe, dropout-rate, learning rate, etc.
Kommen zurück zu deiner Frage, in einem Modell trainieren wir die Schichten zu verringern die Verluste und optimieren die Parameter, halten die hyperparameters konstant. So, während der RÜCKFÜHRUNG, wo wir anwenden gradient descent oder andere Optimierungs-Algorithmus wir aktualisieren die GEWICHTE und die Verzerrungen nach jeder RÜCKFÜHRUNG Schritt.
In einfachen Worten, trainierbare Parameter optimiert werden, während die Ausbildung in der Erwägung, dass nicht-trainierbare Parameter nicht optimiert werden, während der Ausbildung.