TensorFlow에서 단계와 시대의 차이점은 무엇입니까?


125

대부분의 모델에는 데이터에 대해 실행할 단계 수를 나타내는 단계 매개 변수가 있습니다 . 그러나 대부분의 실제 사용에서 우리는 또한 fit 함수 N epochs를 실행합니다 .

1 Epoch로 1000 보를 실행하는 것과 Epoch 10 개로 100 보를 실행하는 것의 차이점은 무엇입니까? 실제로 어느 것이 더 낫습니까? 연속적인 시대 사이에 논리가 변경됩니까? 데이터 셔플?


1
machinelearningmastery.com의 Jason Brownlee 는 정확히 그 질문에 대해 매우 훌륭하고 자세한 답변 을 제공합니다.
BmyGuest

답변:


84

에포크는 일반적으로 모든 훈련 데이터에 대해 한 번의 반복을 의미합니다. 예를 들어 이미지가 20,000 개이고 배치 크기가 100이면 epoch에는 20,000 / 100 = 200 단계가 포함되어야합니다. 그러나 나는 일반적으로 훨씬 더 큰 데이터 세트를 가지고 있음에도 불구하고 epoch 당 1000과 같은 고정 된 수의 단계를 설정했습니다. 시대가 끝날 때 평균 비용을 확인하고 개선되면 체크 포인트를 저장합니다. 한 시대에서 다른 시대로의 단계에는 차이가 없습니다. 나는 그것들을 체크 포인트로 취급합니다.

사람들은 종종 시대 사이에 데이터 세트를 뒤섞습니다. 저는 random.sample 함수를 사용하여 시대에서 처리 할 데이터를 선택하는 것을 선호합니다. 32 개의 배치 크기로 1000 단계를 수행하고 싶다고 가정 해 보겠습니다. 훈련 데이터 풀에서 32,000 개의 샘플을 무작위로 선택하겠습니다.


47
제 의견으로는 두 번째 답변이 잘못되었습니다. 에포크는 훈련 데이터를 통해 한 주기로 정의됩니다. 단계 수를 수정하면 시대가 아닙니다. 유사하게 각 단계에서 학습 예제를 독립적으로 샘플링하면 Epoch라고 부를 수 없습니다. 체크 포인트를 저장하고 N 단계마다 검사를 수행 할 수 있지만 이것이 N 단계가 신기원이된다는 의미는 아닙니다. 코드에서이 시대를 부르는 것을 피하고 혼동 할 가능성이 있습니다.
MarvMind

84

훈련 단계는 하나의 그래디언트 업데이트입니다. 한 단계 batch_size에서 많은 예제가 처리됩니다.

에포크는 훈련 데이터를 통한 하나의 전체 주기로 구성됩니다. 이것은 일반적으로 많은 단계입니다. 예를 들어 2,000 개의 이미지가 있고 10 개의 배치 크기를 사용하는 경우 한 시대는 2,000 개의 이미지 / (10 개의 이미지 / 단계) = 200 단계로 구성됩니다.

훈련 이미지를 각 단계에서 무작위로 (독립적으로) 선택하면 일반적으로 epoch라고 부르지 않습니다. [이것은 내 답변이 이전 답변과 다른 부분입니다. 내 의견도 참조하십시오.]


나는 당신이 ... 내가 여기은 "알 수없는 사용자"얘기하고 싶지 그렇다면, 200 단계의 계산에 편집을했지만 로그인하는 것을 잊었다
크리스 Chiasson

16

현재 tf.estimator API로 실험 중이므로 여기에 제 결과물을 추가하고 싶습니다. 단계 및 epochs 매개 변수의 사용이 TensorFlow 전체에서 일관되는지 아직 알지 못하므로 지금은 tf.estimator (특히 tf.estimator.LinearRegressor)와 관련이 있습니다.

에 의해 정의 된 훈련 단계 num_epochs: 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)

코멘트 : 내가 설정 한 num_epochs=1훈련 입력에 대한 문서의 항목은 numpy_input_fn나에게 말한다 "데이터 반복하는 정수, 시대의 수 만약이 num_epochs을. None영원히 실행됩니다." . 로 num_epochs=1위의 예에서 훈련 정확하게 실행 x_train.size / BATCH_SIZE의 시간 / 단계 (나의 경우이 175000 단계이었다 x_train700000의 크기를했고, batch_size4이었다).

다음에 의해 정의 된 훈련 단계 num_epochs: steps암시 적으로 정의 된 단계 수보다 더 높게 명시 적으로 정의 됨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)

설명 : num_epochs=1제 경우에는 175000 단계 ( x_train.size / batch_size with x_train.size = 700,000batch_size = 4 )를 의미하며 이것은 estimator.trainsteps 매개 변수가 200,000으로 설정되었지만 정확히 단계 수입니다 estimator.train(input_fn=train_input, steps=200000).

에 의해 정의 된 훈련 단계 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)

댓글 : 1000 걸음 후에 훈련 중지를 num_epochs=1호출 할 때 설정했지만 numpy_input_fn. steps=1000in 이 in을 estimator.train(input_fn=train_input, steps=1000)덮어 쓰기 때문 num_epochs=1입니다 tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).

결론 : 무엇이든은 매개 변수 num_epochs에 대한 tf.estimator.inputs.numpy_input_fnsteps대한 estimator.train정의, 하한을 통해 실행됩니다 단계의 수를 결정합니다.


11

간단히 말해서
Epoch : Epoch는 전체 데이터 세트에서 1 회 통과 횟수로 간주됩니다
. 단계 : tensorflow에서 1 단계는 세대 수에 예제를 곱한 횟수를 배치 크기로 나눈 값으로 간주됩니다.

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

Umar, 나는 당신의 공식을 사용하여 더 나은 결과를 얻었지만 왜 모든 사람들이 다른 공식을 가지고 있는지 궁금합니다. 위의 모든 사람들이 말한 것처럼 단계 = (총 이미지 수) / 배치 크기.
Satyendra Sahani

@SatyendraSahani 저는 Coursera에서 제공하는 GCP 과정의 강사 중 한 명에게서이 공식을 얻었습니다. 이것이 더 나은 결과를 얻은 경우 일 수 있습니다.
Muhammad Umar Amanat

@Umar,하지만 때때로 샘플 수가 엄청납니다. 우리의 경우처럼 우리는 99,000 개의 샘플을 가지고 있습니다. 배치 크기 8과 epochs 20을 선택하면 총 step_size의 수는 (20 * 99000) / 8 = 247,500입니다. 정말 높은 수치입니다. 이 방법을 의심하기 시작합니다.
Satyendra Sahani

8

Epoch : 훈련 시대는 기울기 계산 및 최적화 (모델 훈련)를위한 모든 훈련 데이터의 완전한 사용을 나타냅니다.

단계 : 훈련 단계는 모델을 훈련하기 위해 하나의 배치 크기의 훈련 데이터를 사용하는 것을 의미합니다.

에포크 당 훈련 단계 수 : total_number_of_training_examples/ batch_size.

총 훈련 단계 수 : number_of_epochsx Number of training steps per epoch.


2

아직 수락 된 답변이 없기 때문에 : 기본적으로 모든 학습 데이터에 대해 한 시대가 실행됩니다. 이 경우 n = Training_lenght / batch_size 인 n 단계가 있습니다.

훈련 데이터가 너무 크면 한 시대에 단계 수를 제한 할 수 있습니다. [ https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]

단계 수가 설정 한 한계에 도달하면 프로세스가 다시 시작되어 다음 세대가 시작됩니다. TF에서 작업 할 때 데이터는 일반적으로 학습을 위해 모델에 공급 될 배치 목록으로 먼저 변환됩니다. 각 단계에서 하나의 배치를 처리합니다.

1 epoch에 1000 단계를 설정하는 것이 더 좋은지 아니면 10 epoch에 100 단계를 설정하는 것이 더 좋은지에 대해서는 정답이 있는지 모르겠습니다. 그러나 다음은 TensorFlow timeseries 데이터 가이드를 사용하는 두 가지 접근 방식으로 CNN을 학습 한 결과입니다.

이 경우 두 가지 접근 방식 모두 매우 유사한 예측으로 이어지며 훈련 프로필 만 다릅니다.

단계 = 20 / 에포크 = 100 여기에 이미지 설명 입력

여기에 이미지 설명 입력

단계 = 200 / 에포크 = 10

여기에 이미지 설명 입력

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.