156 votes

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

Dans la plupart des modèles, il est une des étapes paramètre indiquant le nombre d'étapes à exécuter sur les données. Mais pourtant je le vois dans la plupart de l'utilisation pratique, nous avons également exécuter l'ajustement en fonction de N les époques.

Quelle est la différence entre l'exécution de 1000 étapes avec 1 époque et 100 étapes avec 10 de l'époque? Qui est le mieux dans la pratique? Toute la logique des changements entre deux époques? Les données de brassage?

120voto

MarvMind Points 1687

Une étape de formation est l'un gradient de mise à jour. Dans une étape batch_size de nombreux exemples sont traités.

Une époque se compose d'un cycle complet à travers les données d'entraînement. Ce est généralement de plusieurs étapes. Par exemple, si vous avez de 2 000 images et d'utiliser une taille de lot de 10 une époque se compose de 2 000 images / (10 images / étape) = 200 marches.

Si vous choisissez de notre formation d'image de façon aléatoire (et indépendants) dans chaque étape, vous n'avez normalement pas l'appeler époque. [C'est là que ma réponse diffère de la précédente. Voir aussi mon commentaire.]

94voto

chasep255 Points 5088

Une époque signifie généralement une itération sur l'ensemble des données d'entraînement. Par exemple, si vous avez 20 000 images et une taille de lot de 100 puis l'époque doit contenir de 20 000 / 100 = 200 marches. Cependant j'ai l'habitude de simplement définir un nombre fixe d'étapes comme 1000 par époque, même si j'ai un beaucoup plus grand ensemble de données. À la fin de l'époque-je vérifier le coût moyen et si il a amélioré je enregistrer un point de contrôle. Il n'y a pas de différence entre les étapes d'une époque à l'autre. Je viens de les traiter comme des points de contrôle.

Souvent, les gens shuffle autour de l'ensemble de données entre les époques. Je préfère utiliser le hasard.exemple de fonction de choisir les données à traiter dans ma époques. Donc, dire que je veux faire 1000 étapes avec une taille de lot de 32. Je vais choisir au hasard 32 000 échantillons à partir du pool de données de formation.

17voto

dmainz Points 69

Comme je suis actuellement à l'essai avec la tf.estimateur de l'API, j'aimerais ajouter ma rosée résultats ici aussi. Je ne sais pas encore si l'utilisation de mesures et d'époques paramètres cohérente dans l'ensemble de TensorFlow et donc je suis juste relatifs à la tf.estimateur (spécifiquement tf.estimateur.LinearRegressor) pour l'instant.

Formation étapes définies par num_epochs: steps pas explicitement défini

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 mis num_epochs=1 pour la formation et la doc entrée pour numpy_input_fn me dit "num_epochs: Entier, nombre d'époques pour itérer sur les données. Si None fonctionnera jamais.". Avec num_epochs=1 dans l'exemple ci-dessus, la formation se déroule exactement x_train.taille/batch_size fois/étapes (dans mon cas, cela a été 175000 étapes x_train avaient une taille de 700000 et batch_size a 4).

Formation étapes définies par num_epochs: steps explicitement défini plus haut que le nombre de mesures définis implicitement 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 signifie 175000 étapes (x_train.taille/batch_size avec x_train.size=de 700 000 et batch_size=4) et c'est exactement le nombre d'étapes estimator.train mais les étapes paramètre a été fixé à 200 000 estimator.train(input_fn=train_input, steps=200000).

Formation étapes 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 mis en num_epochs=1 lors de l'appel d' numpy_input_fnla formation s'arrête au bout de 1000 mesures. C'est parce qu' steps=1000 en estimator.train(input_fn=train_input, steps=1000) remplace l' num_epochs=1 en tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).

Conclusion: Quel que soit le paramètre (num_epochs pour tf.estimator.inputs.numpy_input_fn ou steps pour estimator.train) définit la limite inférieure détermine le nombre d'étapes qui sera exécuté à travers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X