45 votes

tutoriel d'initiation étapes vs num_epochs dans tensorflow

Je suis TensorFlow commencer le tutoriel. Dans l' tf.contrib.learn exemple, ces deux lignes de code:

input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4, num_epochs=1000)
estimator.fit(input_fn=input_fn, steps=1000)

Je me demande quelle est la différence entre l'argument steps dans l'appel d' fit de la fonction et de l' num_epochs dans la numpy_input_fn appel. Ne devrait-il pas être juste un argument? Comment sont-ils connectés?

J'ai trouvé que le code est en quelque sorte prendre l' min de ces deux comme le nombre d'étapes dans le jouet à l'exemple de ce tutoriel.


Modifier

Merci pour toutes les réponses. À mon humble avis, au moins, l'un des deux paramètres, soit num_epochs ou steps a être redondant. Nous pouvons calculer l'un de l'autre. Est-il possible que je puisse savoir combien de marches (nombre de fois que les paramètres mis à jour) mon algorithme a pris réellement?

Je suis curieux de savoir qui prend la priorité. Et cela dépend-il de certains autres paramètres?

45voto

Mad Wombat Points 1133

La contrib.apprendre.io module n'est pas documentée, très bien, mais il semble qu' numpy_input_fn() fonction prend quelques tableaux numpy et des lots ensemble comme entrée pour un classificator. Ainsi, le nombre d'époques signifie probablement "combien de fois de passer par l'entrée de données que j'ai avant de s'arrêter". Dans ce cas, ils se nourrissent de deux tableaux de longueur 4 dans 4 élément lots, donc elle va juste dire que la fonction d'entrée sera de le faire au plus 1000 fois avant de déclencher une "sortie de données de" l'exception". Les étapes de l'argumentation dans la estimateur fit() fonction est combien de fois doit estimateur de faire de la formation de la boucle. Cet exemple particulier est un peu pervers, laissez-moi donc faire un autre pour rendre les choses un peu plus clair (je l'espère).

Disons que vous avez deux tableaux numpy (échantillons et les étiquettes que vous voulez vous entraîner sur. Ils sont à 100 éléments. Vous voulez que votre formation pour prendre des lots avec les 10 échantillons par lot. Après 10 lots que vous allez passer au travers de toutes vos données d'entraînement. C'est une époque. Si vous définissez votre entrée générateur à 10 époques, il faudra passer par votre formation à 10 fois avant de s'arrêter, c'est qu'il va générer à plus de 100 lots.

Encore une fois, le io module n'est pas documentée, mais vu comment les autres commentaires Api dans tensorflow travail, il devrait être possible de générer des données pour un nombre illimité d'époques, de sorte que la seule chose que le contrôle de la durée de la formation vont être les étapes. Cela vous donne une plus grande flexibilité sur la façon dont vous voulez que votre formation pour progresser. Vous pouvez aller à un certain nombre d'époques, à un moment ou à un certain nombre d'étapes, à un moment ou les deux, ou quoi que ce soit.

Edit: TL;DR Époque, c'est quand votre modèle passe au travers de votre ensemble de données d'apprentissage une fois. Étape, c'est quand votre modèle de trains sur un seul lot (ou un seul échantillon si vous envoyer des échantillons un par un). Formation de 5 époques sur 1000 échantillons de 10 échantillons par lot 500 étapes.

23voto

Himanshu Sanghi Points 181

Époque: Un passage par la totalité des données.

Taille du lot: Le pas des exemples vus en un seul lot.

Si il ya plus de 1000 exemples et la taille du lot est de 100, alors il y aura 10 étapes pour l'époque.

Les Époques et de la taille des lots de définir entièrement le nombre d'étapes.

steps_cal = (pas d'ex / batch_size) * no_of_epochs

estimator.fit(input_fn=input_fn)

Si vous venez d'écrire le code ci-dessus, la valeur de 'étapes' est donnée par 'steps_cal" dans la formule ci-dessus.

estimator.fit(input_fn=input_fn, steps  = steps_less)

Si vous donnez une valeur(dire "steps_less') moins de 'steps_cal', alors que "steps_less' aucune des étapes seront exécutées.Dans ce cas, la formation ne couvre pas l'ensemble de la pas de des époques qui ont été mentionnés.

estimator.fit(input_fn=input_fn, steps  = steps_more)

Si vous donnez une valeur(disons steps_more) plus de steps_cal, puis aussi "steps_cal' aucune des étapes seront exécutées.

19voto

Manuel Points 198

Commençons l'inverse l'ordre:

1) les Étapes - nombre de fois que la formation de la boucle dans votre apprentissage de l'algorithme exécuté pour mettre à jour les paramètres du modèle. Dans chaque itération de boucle, il sera procédé à un bloc de données, qui est en fait un lot. Généralement, cette boucle est basée sur la Descente de Gradient algorithme.

2) la taille des Lots - la taille du bloc de données, vous nourrir, à chaque itération de l'algorithme d'apprentissage. Vous pouvez nourrir l' ensemble du jeu de données, auquel cas la taille des lots est égale à l'ensemble de données de taille.Vous pouvez également nourrir un exemple à la fois. Ou vous pouvez nourrir un nombre N d'exemples.

3) de l'Époque - le nombre de fois que vous exécutez sur l'ensemble de données, extraction de lots pour nourrir l'algorithme d'apprentissage.

Disons que vous avez 1000 exemples. Réglage de la taille de lot = 100, epoch = 1 et pas = 200 donne un processus en une seule passe (une époque) et sur l'ensemble des données. À chaque passage, il se nourrit de l'algorithme un lot de 100 exemples. L'algorithme exécuté 200 étapes dans chaque lot. Au total, 10 lots sont visibles. Si vous modifiez l'époque à 25, puis il va faire 25 fois, et vous obtenez 25x10 lots de vu tout à fait.

Pourquoi avons-nous besoin de cela? Il existe de nombreuses variantes de descente de gradient (lot, stochastique, mini-lot) ainsi que d'autres algorithmes pour l'optimisation des paramètres d'apprentissage (p. ex., L-BFGS). Certains d'entre eux ont besoin de voir les données en lots, alors que d'autres voient une donnée à la fois. Aussi, certains d'entre eux comprennent des facteurs aléatoires/étapes, par conséquent, vous pourriez avoir besoin de plusieurs passages sur les données pour obtenir une bonne convergence.

14voto

pbskumar Points 713

Cette réponse est fondée sur l'expérimentation que j'ai fait sur le tutoriel d'initiation code.

Mad Wombat a donné une explication détaillée des termes num_epochs, batch_size et les étapes. Cette réponse est une extension de sa réponse.

num_epochs - Le nombre maximum de fois que le programme peut effectuer une itération sur l'ensemble du jeu de données dans un train(). L'utilisation de cet argument, nous pouvons limiter le nombre de lots qui peuvent être traitées lors de l'exécution d'un train() méthode.

batch_size - Le nombre d'exemples dans un lot unique émise par le input_fn

les étapes - Nombre de lots de la LinearRegressor.train() méthode peut traiter en une seule exécution

max_steps est un autre argument pour LinearRegressor.train() méthode. Cet argument définit le nombre maximal d'étapes (lots) peut traiter dans l' LinearRegressor() durée de vie des objets.

Voyons quel est ce moyen. Les expériences suivantes permettent de modifier les deux lignes de code fourni par le tutoriel. Reste du code reste comme c'est.

Remarque: Pour tous les exemples, supposons que le nombre de la formation, soit la longueur de x_train être égale à 4.

Ex 1:

input_fn = tf.estimator.inputs.numpy_input_fn( {"x": x_train}, y_train, batch_size=4, num_epochs=2, shuffle=True)

estimator.train(input_fn=input_fn, steps=10)

Dans cet exemple, nous avons défini la batch_size = 4 et num_epochs = 2. Ainsi, l' input_fn d'émettre de seulement 2 lots de données d'entrée pour une exécution d' train(). Même si nous avons défini les étapes = 10, train() méthode s'arrête après 2 étapes.

Maintenant, exécutez l' estimator.train(input_fn=input_fn, steps=10) de nouveau. Nous pouvons voir que les 2 autres étapes ont été exécutées. Nous pouvons continuer l'exécution de l' train() méthode, encore et encore. Si nous exécutons train() 50 fois, un total de 100 étapes ont été exécutées.

Ex 2:

input_fn = tf.estimator.inputs.numpy_input_fn( {"x": x_train}, y_train, batch_size=2, num_epochs=2, shuffle=True)

estimator.train(input_fn=input_fn, steps=10)

Dans cet exemple, la valeur de batch_size est changée à 2 (il était égal à 4 Ex 1). Maintenant, à chaque exécution d' train() méthode, 4 étapes sont traitées. Après la 4ème étape, il n'y a pas de lots pour exécuter sur. Si l' train() méthode est exécutée à nouveau, un autre 4 étapes faire un total de 8 étapes.

Ici, la valeur des étapes n'a pas d'importance parce que l' train() méthode peut obtenir un maximum de 4 lots. Si la valeur de mesures est inférieur à (num_epochs x training_size) / batch_size, voir ex 3.

Ex 3:

input_fn = tf.estimator.inputs.numpy_input_fn( {"x": x_train}, y_train, batch_size=2, num_epochs=8, shuffle=True)

estimator.train(input_fn=input_fn, steps=10)

Maintenant, laissez batch_size = 2, num_epochs = 8 et étapes = 10. L' input_fn peut émettre un total de 16 lots dans un terme d' train() méthode. Toutefois, des mesures est fixé à 10. Cela signifie que eventhough input_fn peut fournir 16 lots pour l'exécution, train() doit s'arrêter après 10 étapes. Bien sûr, train() méthode peut être ré-exécuté pour plus d'étapes, de façon cumulative.


À partir des exemples 1, 2 et 3, nous pouvons voir clairement comment les valeurs de mesures, num_epoch et batch_size incidence sur le nombre d'étapes qui peuvent être exécutées par train() méthode en un seul passage.

Le max_steps argument de l' train() méthode limite le nombre total d'étapes qui peuvent être exécutés de façon cumulative en train()

Ex 4:

Si batch_size = 4, num_epochs = 2, l' input_fn d'émettre de 2 lots pour un train() d'exécution. Mais, si max_steps est fixé à 20, peu importe combien de fois train() est exécutée seulement 20 étapes seront exécutées dans l'optimisation. Ceci est en contraste à l'exemple 1, où l'optimiseur peut exécuter à 200 étapes si l' train() méthode est exuted 100 fois.

Espérons que cela donne une compréhension détaillée de ce que ces arguments veux dire.

3voto

Change-the-world Points 142

num_epochs: le nombre maximum d'époques (en voyant chaque point de données).

étapes: le nombre de mises à jour (de paramètres).

Vous pouvez mettre à jour plusieurs fois au cours d'une époque lorsque la taille du lot est inférieure au nombre de données d'apprentissage.

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