Lorsque vous utilisez le modèle créé dans un service en ligne, je voudrais mettre à jour le modèle existant chaque jour avec les données nouvellement accumulées, mais il faut du temps et de l'argent pour faire pivoter toutes les données dans un lot chaque jour. Dans l'apprentissage d'image, il est courant qu'un modèle entraîné tel que VGG16 lise l'image que vous souhaitez discriminer et effectue un réglage fin. Donc, cette fois, j'ai enregistré un modèle construit avec des données ordinaires et essayé de régler finement le modèle.
Seuls les points seront introduits ici, veuillez donc consulter l'exemple de code qui fonctionne réellement à partir de ce qui suit. 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
Cette fois, nous diviserons les données d'iris de manière appropriée et les formerons en deux parties.
Tout d'abord, définissez le modèle de base. Le seul point est de mettre le paramètre name
dans le calque dont vous voulez hériter.
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'))
Après l'ajustement avec les données de la base, enregistrez les poids du modèle.
python
model_b.save_weights('my_model_weights.h5')
Correspond au «nom» du calque. Cet exemple ajoute un calque Dropout pour éviter la sur-réflexion des nouvelles données.
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'))
Chargez les poids dans le modèle nouvellement créé et entraînez le reste des modèles.
python
#Poids de chargement
model_n.load_weights('my_model_weights.h5', by_name=True)
#compiler&Courir
model_n.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_n.fit(new_X, new_Y, epochs=50, batch_size=1, verbose=1)
Il semble qu'il puisse également être utilisé lorsque vous souhaitez apprendre séparément la quantité de données qui ne tournent pas en raison d'une mémoire excessive.
Recommended Posts