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
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)
etmodel.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
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.