web-dev-qa-db-fra.com

Quelle est la différence entre les étapes et les époques dans TensorFlow?

Dans la plupart des modèles, il existe un paramètre steps indiquant le nombre d'étapes à exécuter pour les données. Cependant, dans la plupart des applications pratiques, nous exécutons également la fonction d’ajustement N epochs.

Quelle est la différence entre exécuter 1000 étapes avec 1 époque et exécuter 100 étapes avec 10 périodes? Lequel est meilleur dans la pratique? Des changements de logique entre les époques consécutives? Remaniement des données?

99
Yang

Une époque signifie généralement une itération sur toutes les données d’entraînement. 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 règle généralement un nombre fixe d'étapes, par exemple 1000 par époque, même si mon ensemble de données est beaucoup plus volumineux. À la fin de l'époque, je vérifie le coût moyen et, si cela s'améliore, j'enregistre un point de contrôle. Il n'y a pas de différence entre les étapes d'une époque à l'autre. Je les traite simplement comme des points de contrôle.

Les gens mélangent souvent les données entre les époques. Je préfère utiliser la fonction random.sample pour choisir les données à traiter dans mes époques. Donc, disons que je veux faire 1000 étapes avec une taille de lot de 32. Je vais simplement sélectionner au hasard 32 000 échantillons dans le pool de données d’entraînement.

71
chasep255

Une étape de formation est une mise à jour de gradient. En une étape batch_size, de nombreux exemples sont traités.

Une époque consiste en un cycle complet dans les données d'apprentissage. Ceci est généralement plusieurs étapes. Par exemple, si vous avez 2 000 images et utilisez une taille de lot de 10, une époque comprend 2 000 images/(10 images/étape) = 200 étapes.

Si vous choisissez notre image d'entraînement de manière aléatoire (et indépendante) à chaque étape, vous ne l'appelez normalement pas Epoch. [C'est là que ma réponse diffère de la précédente. Voir aussi mon commentaire.]

64
MarvMind

Étant donné que je suis en train d’expérimenter avec l’API tf.estimator, j’aimerais ajouter mes découvertes ici aussi. Je ne sais pas encore si l'utilisation des paramètres steps et epochs est cohérente dans TensorFlow et, par conséquent, je ne fais que me rapporter à tf.estimator (plus précisément tf.estimator.LinearRegressor) pour l'instant.

Les étapes d'apprentissage définies par num_epochs: steps non définies explicitement

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)

Commentaire: J'ai défini num_epochs=1 pour l'entrée d'apprentissage et l'entrée de document pour numpy_input_fn me dit "num_epochs: Integer, nombre d'époques à parcourir sur les données. Si None fonctionnera pour toujours. ". Avec num_epochs=1 dans l'exemple ci-dessus, la formation se déroule exactement x_train.size/batch_size fois/étapes (dans mon cas, il s'agissait de 175 000 étapes sous la forme x_train avait une taille de 700 000 et batch_size avait 4).

Étapes d'apprentissage définies par num_epochs: steps explicitement définies comme supérieures au nombre d'étapes implicitement définies par num_epochs=1

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)

Commentaire: num_epochs=1 dans mon cas, cela signifierait 175 000 étapes ( x_train.size/batch_size avec x_train. size = 700,000 et batch_size = 4 ) et il s’agit exactement du nombre d’étapes estimator.train bien que le Le paramètre Steps a été défini sur 200 000 estimator.train(input_fn=train_input, steps=200000).

étapes de formation définies par steps

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)

Commentaire: Bien que j'ai réglé num_epochs=1 lors de l'appel de numpy_input_fn l'entraînement s'arrête après 1 000 pas. En effet, steps=1000 dans estimator.train(input_fn=train_input, steps=1000) remplace le num_epochs=1 dans tf.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 pour tf.estimator.inputs.numpy_input_fn et steps pour estimator.train définir, la limite inférieure détermine le nombre d'étapes à exécuter. .

12
dmainz

En mots faciles
Epoch: Epoch est considéré comme le nombre d'un passage de l'ensemble de données
Steps: Dans tensorflow, une étape est considérée comme le nombre d'époques multiplié par des exemples divisés par la taille du lot

steps = (Epoch * examples)/batch size
For instance
Epoch = 100, examples = 1000 and batch_size = 1000
steps = 100
7

Epoque: une époque de formation représente une utilisation complète de toutes les données de formation pour le calcul et l'optimisation de gradients (former le modèle).

Étape: une étape de formation signifie une formation utilisant une taille de lot de données de formation à la fois.

Nombre d'étapes de formation par époque: total_number_of_training_examples/batch_size

Nombre total d'étapes de formation: nombre d'époques x Nombre d'étapes de formation par époque

Pourquoi les gens spécifient-ils parfois uniquement le nombre d'étapes d'apprentissage sans spécifier le nombre d'époques d'apprentissage? Donc, il suffit de définir le nombre d'étapes de formation.

1
Xin Su