Dans la plupart des modèles, il existe un paramètre d' étapes indiquant le nombre d'étapes à parcourir sur les données . Mais pourtant, je vois dans la plupart des usages pratiques, nous exécutons également la fonction fit N epochs .
Quelle est la différence entre exécuter 1000 étapes avec 1 époque et 100 étapes avec 10 périodes? Lequel est le meilleur en pratique? Y a-t-il des changements de logique entre des époques consécutives? Mélange de données?
Réponses:
Une époque signifie généralement une itération sur toutes les données d'apprentissage. Par exemple, si vous avez 20 000 images et une taille de lot de 100, l'époque devrait contenir 20 000/100 = 200 étapes. Cependant, je fixe généralement un nombre fixe d'étapes comme 1000 par époque, même si j'ai un ensemble de données beaucoup plus grand. À la fin de l'époque, je vérifie le coût moyen et s'il s'améliore, je sauvegarde un point de contrôle. Il n'y a aucune différence entre les étapes d'une époque à l'autre. Je les traite simplement comme des points de contrôle.
Les gens se déplacent souvent dans l'ensemble de données entre les époques. Je préfère utiliser la fonction random.sample pour choisir les données à traiter à mon époque. Alors disons que je veux faire 1 000 étapes avec une taille de lot de 32. Je vais juste choisir au hasard 32 000 échantillons dans le pool de données d'entraînement.
la source
Une étape de formation est une mise à jour de gradient. En une seule étape batch_size de nombreux exemples sont traités.
Une époque consiste en un cycle complet à travers les données d'apprentissage. Il s'agit généralement de plusieurs étapes. Par exemple, si vous avez 2 000 images et que vous utilisez une taille de lot de 10, une époque se compose de 2 000 images / (10 images / étape) = 200 étapes.
Si vous choisissez notre image d'entraînement au hasard (et indépendamment) à chaque étape, vous ne l'appelez normalement pas époque. [C'est là que ma réponse diffère de la précédente. Voir aussi mon commentaire.]
la source
Comme j'expérimente actuellement avec l'API tf.estimator, j'aimerais également ajouter mes résultats de rosée ici. Je ne sais pas encore si l'utilisation des paramètres d'étapes et d'époques est cohérente dans TensorFlow et je ne parle donc que de tf.estimator (en particulier de tf.estimator.LinearRegressor) pour le moment.
Étapes de formation définies par
num_epochs
:steps
non explicitement définiesCommentaire: J'ai défini
num_epochs=1
l'entrée de formation et l'entrée de doc pournumpy_input_fn
me dit "num_epochs: Integer, nombre d'époques à parcourir sur les données. IfNone
fonctionnera pour toujours." . Dansnum_epochs=1
l'exemple ci-dessus, la formation s'exécute exactement x_train.size / batch_size fois / étapes (dans mon cas, il s'agissait de 175000 étapes commex_train
une taille de 700000 etbatch_size
était de 4).Étapes d'entraînement définies par
num_epochs
:steps
explicitement définies plus haut que le nombre d'étapes implicitement définies parnum_epochs=1
Commentaire:
num_epochs=1
dans mon cas, cela signifierait 175000 étapes ( x_train.size / batch_size avec x_train.size = 700000 et batch_size = 4 ) et c'est exactement le nombre d'étapesestimator.train
bien que le paramètre steps ait été défini sur 200000estimator.train(input_fn=train_input, steps=200000)
.Étapes de formation définies par
steps
Commentaire: Bien que je l'ai défini
num_epochs=1
lors de l'appel,numpy_input_fn
la formation s'arrête après 1000 étapes. En effet,steps=1000
inestimator.train(input_fn=train_input, steps=1000)
remplace le fichiernum_epochs=1
intf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.Conclusion : Quels que soient les paramètres
num_epochs
pourtf.estimator.inputs.numpy_input_fn
etsteps
pourestimator.train
définir, la borne inférieure détermine le nombre d'étapes qui seront exécutées.la source
En termes simples
Epoch: L' époque est considérée comme le nombre d'une passe de l'ensemble de données.Étapes
: Dans tensorflow, une étape est considérée comme le nombre d'époques multiplié par les exemples divisé par la taille du lot
la source
Epoque: Une époque d'apprentissage représente une utilisation complète de toutes les données d'entraînement pour le calcul des gradients et les optimisations (entraîner le modèle).
Étape: Une étape d'entraînement signifie l'utilisation d'une taille de lot de données d'entraînement pour entraîner le modèle.
Nombre d'étapes de formation par époque:
total_number_of_training_examples
/batch_size
.Nombre total d'étapes de formation:
number_of_epochs
xNumber of training steps per epoch
.la source
Puisqu'il n'y a pas encore de réponse acceptée: par défaut, une époque couvre toutes vos données d'entraînement. Dans ce cas, vous avez n étapes, avec n = Training_lenght / batch_size.
Si vos données d'entraînement sont trop volumineuses, vous pouvez décider de limiter le nombre d'étapes au cours d'une époque. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]
Lorsque le nombre d'étapes atteint la limite que vous avez définie, le processus recommence et commence à l'époque suivante. Lorsque vous travaillez dans TF, vos données sont généralement d'abord transformées en une liste de lots qui seront introduits dans le modèle pour la formation. À chaque étape, vous traitez un lot.
Quant à savoir s'il vaut mieux définir 1000 étapes pour 1 époque ou 100 étapes avec 10 époques, je ne sais pas s'il existe une réponse claire. Mais voici les résultats de la formation d'un CNN avec les deux approches à l'aide des didacticiels de données de séries temporelles TensorFlow:
Dans ce cas, les deux approches conduisent à des prédictions très similaires, seuls les profils de formation diffèrent.
pas = 20 / époques = 100
pas = 200 / époques = 10
la source