web-dev-qa-db-fra.com

Appeler "fit" plusieurs fois dans Keras

J'ai travaillé sur un CNN sur plusieurs centaines de Go d'images. J'ai créé une fonction d'entraînement qui mord des morceaux de 4 Go de ces images et appelle fit sur chacune de ces pièces. Je crains de ne m'entraîner que sur la dernière pièce et non sur l'ensemble des données.

En effet, mon pseudo-code ressemble à ceci:

DS = lazy_load_400GB_Dataset()
for section in DS:
    X_train = section.images
    Y_train = section.classes

    model.fit(X_train, Y_train, batch_size=16, nb_Epoch=30)

Je sais que l'API et les forums Keras disent que cela s'entraînera sur l'ensemble des données, mais je ne comprends pas intuitivement pourquoi le réseau ne réapprendrait pas uniquement le dernier bloc de formation.

Certains aider à comprendre cela seraient très appréciés.

Cordialement, Joe

28
jonas smith

Pour les ensembles de données qui ne tiennent pas en mémoire, il y a une réponse dans la Keras Documentation FAQ section

Vous pouvez effectuer une formation par lots à l'aide de model.train_on_batch(X, y) et model.test_on_batch(X, y). Voir la documentation des modèles .

Vous pouvez également écrire un générateur qui génère des lots de données d'apprentissage et utiliser la méthode model.fit_generator(data_generator, samples_per_Epoch, nb_Epoch).

Vous pouvez voir la formation par lots en action dans notre exemple CIFAR1 .

Donc, si vous souhaitez itérer votre jeu de données comme vous le faites, vous devriez probablement utiliser model.train_on_batch et prenez soin de la taille des lots et de l'itération vous-même.

Une autre chose à noter est que vous devez vous assurer que l'ordre dans lequel les échantillons avec lesquels vous entraînez votre modèle est mélangé après chaque époque. La façon dont vous avez écrit l'exemple de code ne semble pas mélanger l'ensemble de données. Vous pouvez lire un peu plus sur le brassage ici et ici

24
Makis Tsantekidis

Cette question a été soulevée dans le référentiel Keras github dans Problème # 4446: Question rapide: un modèle peut-il être adapté plusieurs fois? Il a été fermé par François Chollet avec ce qui suit instruction :

Oui, des appels successifs à fit entraîneront progressivement le modèle.

Donc, oui, vous pouvez appeler fit plusieurs fois.

12
curlyhairedgenius