Wenn ich das erstellte Modell in einem Onlinedienst verwende, möchte ich das vorhandene Modell jeden Tag mit den neu gesammelten Daten aktualisieren, aber es kostet Zeit und Geld, alle Daten in einem Stapel jeden Tag zu drehen. Beim Bildtraining ist es üblich, dass ein trainiertes Modell wie VGG16 das Bild, das Sie unterscheiden möchten, liest und eine Feinabstimmung durchführt. Dieses Mal habe ich ein Modell gespeichert, das mit normalen Daten erstellt wurde, und versucht, das Modell zu optimieren.
Hier werden nur die Punkte vorgestellt. Lesen Sie daher den folgenden Beispielcode, der tatsächlich funktioniert. https://github.com/tizuo/keras/blob/master/%E8%BB%A2%E7%A7%BB%E5%AD%A6%E7%BF%92%E3%83%86%E3%82%B9%E3%83%88.ipynb
Dieses Mal werden wir die Irisdaten entsprechend aufteilen und in zwei Teile trainieren.
Definieren Sie zunächst das Basismodell. Der einzige Punkt ist, den Parameter name
in die Ebene zu setzen, die Sie erben möchten.
python
model_b = Sequential()
model_b.add(Dense(4, input_shape=(4, ), name='l1'))
model_b.add(Activation('relu'))
model_b.add(Dense(4, input_shape=(4, ), name='l2'))
model_b.add(Activation('relu'))
model_b.add(Dense(3, name='cls'))
model_b.add(Activation('softmax'))
Speichern Sie nach dem Anpassen der Daten für die Basis die Modellgewichte.
python
model_b.save_weights('my_model_weights.h5')
Entspricht dem Namen der Ebene. In diesem Beispiel wird eine Dropout-Ebene hinzugefügt, um eine Überreflexion neuer Daten zu verhindern.
python
model_n = Sequential()
model_n.add(Dense(4, input_shape=(4, ), name='l1'))
model_n.add(Activation('relu'))
model_n.add(Dense(4, input_shape=(4, ), name='l2'))
model_n.add(Activation('relu'))
model_n.add(Dropout(0.5))
model_n.add(Dense(3, name='cls'))
model_n.add(Activation('softmax'))
Laden Sie die Gewichte in das neu erstellte Modell und trainieren Sie den Rest der Modelle.
python
#Gewichte laden
model_n.load_weights('my_model_weights.h5', by_name=True)
#kompilieren&Lauf
model_n.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_n.fit(new_X, new_Y, epochs=50, batch_size=1, verbose=1)
Es scheint, dass es auch verwendet werden kann, wenn Sie die Datenmenge, die sich aufgrund des Speichers nicht dreht, separat lernen möchten.
Recommended Posts