W większości modeli występuje parametr steps określający liczbę kroków potrzebnych do uruchomienia danych . Jednak widzę, że w większości praktycznych zastosowań wykonujemy również funkcję dopasowania N epok .
Jaka jest różnica między uruchomieniem 1000 kroków w 1 epoce a przebiegiem 100 kroków z 10 epoką? Który z nich jest lepszy w praktyce? Jakieś zmiany logiczne między kolejnymi epokami? Tasowanie danych?
Odpowiedzi:
Epoka zwykle oznacza jedną iterację po wszystkich danych uczących. Na przykład, jeśli masz 20 000 obrazów i rozmiar partii 100, to epoka powinna zawierać 20 000/100 = 200 kroków. Jednak zwykle ustawiam stałą liczbę kroków, na przykład 1000 na epokę, mimo że mam znacznie większy zestaw danych. Pod koniec epoki sprawdzam średni koszt i jeśli się poprawił to zapisuję punkt kontrolny. Nie ma różnicy między krokami z jednej epoki do drugiej. Traktuję je po prostu jako punkty kontrolne.
Ludzie często poruszają się po zbiorach danych między epokami. Wolę używać funkcji random.sample, aby wybrać dane do przetworzenia w moich epokach. Powiedzmy, że chcę wykonać 1000 kroków przy wielkości partii 32. Po prostu wybiorę losowo 32 000 próbek z puli danych uczących.
źródło
Etap szkolenia to jedna aktualizacja gradientu. W jednym kroku batch_size przetwarzanych jest wiele przykładów.
Epoka składa się z jednego pełnego cyklu obejmującego dane uczące. Zwykle jest to wiele kroków. Na przykład, jeśli masz 2000 obrazów i używasz rozmiaru partii 10, epoka składa się z 2000 obrazów / (10 obrazów / krok) = 200 kroków.
Jeśli wybierzesz nasz obraz treningowy losowo (i niezależnie) na każdym kroku, zwykle nie nazywasz tego epoką. [Tutaj moja odpowiedź różni się od poprzedniej. Zobacz także mój komentarz.]
źródło
Ponieważ obecnie eksperymentuję z interfejsem API tf.estimator, chciałbym tutaj również dodać moje zroszone odkrycia. Nie wiem jeszcze, czy użycie parametrów kroków i epok jest spójne w całym TensorFlow i dlatego na razie odnoszę się tylko do tf.estimator (a konkretnie tf.estimator.LinearRegressor).
Etapy szkolenia zdefiniowane przez
num_epochs
:steps
nie zostały wyraźnie określoneKomentarz: Ustawiłem
num_epochs=1
dla danych wejściowych uczących i wpis w dokumencienumpy_input_fn
mówi mi „num_epochs: Integer, liczba epok do iteracji po danych. JeśliNone
będzie działać wiecznie”. . Wnum_epochs=1
powyższym przykładzie szkolenie przebiega dokładnie x_train.size / batch_size razy / kroki (w moim przypadku było to 175000 kroków, ax_train
miał rozmiar 700000 ibatch_size
było 4).Kroki szkoleniowe zdefiniowane przez
num_epochs
:steps
jawnie zdefiniowane powyżej liczby kroków domyślnie zdefiniowane przeznum_epochs=1
Komentarz:
num_epochs=1
w moim przypadku oznaczałoby to 175000 kroków ( x_train.size / batch_size z x_train.size = 700000 i batch_size = 4 ) i jest to dokładnie liczba kroków,estimator.train
chociaż parametr kroków został ustawiony na 200000estimator.train(input_fn=train_input, steps=200000)
.Etapy szkolenia zdefiniowane przez
steps
Komentarz: Chociaż ustawiłem
num_epochs=1
przy wywoływaniunumpy_input_fn
trening zatrzymuje się po 1000 krokach. Dzieje się tak, ponieważsteps=1000
westimator.train(input_fn=train_input, steps=1000)
nadpisujenum_epochs=1
intf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.Wniosek : Niezależnie od parametrów
num_epochs
dlatf.estimator.inputs.numpy_input_fn
isteps
doestimator.train
zdefiniowania, dolna granica określa liczbę kroków, które zostaną wykonane.źródło
W prostych słowach
Epoka: Epoka jest traktowana jako liczba jednego przebiegu z całego zbioru danych
Kroki: W tensorflow jeden krok jest traktowany jako liczba epok pomnożona przez przykłady podzielone przez rozmiar partii
źródło
Epoka: okres uczenia reprezentuje pełne wykorzystanie wszystkich danych uczących do obliczania gradientów i optymalizacji (trenowanie modelu).
Krok: Etap uczenia oznacza użycie jednego rozmiaru partii danych uczących do trenowania modelu.
Liczba kroków treningowych na epokę:
total_number_of_training_examples
/batch_size
.Całkowita liczba kroków treningowych:
number_of_epochs
xNumber of training steps per epoch
.źródło
Ponieważ nie ma jeszcze zaakceptowanej odpowiedzi: Domyślnie epoka obejmuje wszystkie dane treningowe. W tym przypadku masz n kroków, gdzie n = długość_szkolenia / rozmiar_batchu.
Jeśli Twoje dane treningowe są zbyt duże, możesz zdecydować o ograniczeniu liczby kroków w ciągu epoki. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]
Gdy liczba kroków osiągnie ustalony limit, proces rozpocznie się od nowa, rozpoczynając kolejną epokę. Podczas pracy w TF Twoje dane są zwykle najpierw przekształcane w listę partii, które zostaną przekazane do modelu w celu szkolenia. Na każdym etapie przetwarzasz jedną partię.
Jeśli chodzi o to, czy lepiej ustawić 1000 kroków dla 1 epoki, czy 100 kroków dla 10 epok, nie wiem, czy istnieje prosta odpowiedź. Ale oto wyniki szkolenia CNN przy użyciu obu podejść przy użyciu samouczków dotyczących danych TensorFlow Timeseries:
W tym przypadku oba podejścia prowadzą do bardzo podobnych przewidywań, różnią się tylko profile treningowe.
kroki = 20 / epoki = 100
kroki = 200 / epok = 10
źródło