[PYTHON] Essayez Fine Tuning (apprentissage par transfert), qui est le courant dominant avec des images avec keras, avec apprentissage des données

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

Construire un modèle de base

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'))

Enregistrer les poids du modèle

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')

Préparez le modèle à mettre

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'))

Chargement et apprentissage des poids

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

Essayez Fine Tuning (apprentissage par transfert), qui est le courant dominant avec des images avec keras, avec apprentissage des données
Implémentation du "taux d'apprentissage triangulaire incliné" dans Keras, qui est efficace dans le réglage fin de BERT
Juger si c'est mon enfant à partir de l'image du chien Shiba par apprentissage en profondeur (2) Augmentation des données / transfert d'apprentissage / réglage fin
Essayez de résoudre le problème du fizzbuzz avec Keras
Bilan du premier défi du machine learning avec Keras
(Deep learning) J'ai collecté des images de l'API Flickr et essayé de discriminer en transférant l'apprentissage avec VGG16
Essayez de gratter les données COVID-19 Tokyo avec Python
CNN avec keras Essayez avec l'image que vous avez prise
Apprentissage par renforcement dans les plus brefs délais avec Keras avec OpenAI Gym
Essayez d'extraire les caractéristiques des données de capteur avec CNN