안 쓰던 블로그

[헷갈리는 개념 정리1] steps_per_epoch 값 정하기 본문

머신러닝/머신러닝

[헷갈리는 개념 정리1] steps_per_epoch 값 정하기

proqk 2021. 9. 3. 13:02
반응형

steps_per_epoch

steps_per_epoch = 훈련 샘플 수 / 배치 사이즈

예시1: 총 45개의 훈련 샘플이 있고 배치사이즈가 3이면 최대 15 스텝으로 지정한다 (그 이하 가능)

예시2: 총 80개의 훈련 샘플이 있고 배치사이즈가 10이면 최대 8 스텝으로 지정한다 

 

사이즈가 너무 크면 이런 에러가 뜬다

Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 150 batches). You may need to use the repeat() function when building your dataset.

 

쉽게 정리하면.. 이 코드를 사용하면 된다

steps_per_epoch = len(X_train)//batch_size

validation_steps = len(X_test)//batch_size # test data가 있다면

 

 

참고로 이 값은 에포크(epochs) 수랑 상관없다

"steps_per_epoch * batch_size <= 훈련 샘플 수"만 맞춰주면 된다

 

 

주의!!

만약 ImageDataGenerator를 사용했다면 len(X_train)값과 개수가 다를 수 있다

이미지 제너레이터를 선언한 코드 출력으로 나온 길이를 사용하면 된다

 

예시: Found 80 images belonging to 2 classes. -> 총 80개의 훈련 샘플

 

코드 참고

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1/255)

train_generator = train_datagen.flow_from_directory(
        "/tmp/h-or-s",
        target_size=(150,150),
        batch_size=10,
        class_mode="binary"
        )

# output: 'Found 80 images belonging to 2 classes'

history = model.fit(
      train_generator,
      steps_per_epoch=8,
      #9,10,11,12.. 불가능
      #6도 가능, 7도 가능.. 8이 마지노선
      #이 값은 에포크 수랑 상관없다. 총 45개의 훈련 샘플이 있고 배치사이즈가 3이면 15 스텝으로 지정한다
      #배치 사이즈가 10이고, 훈련 샘플은 80개니까, 8개가 마지노선이다
      #안 맞으면 Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 150 batches). You may need to use the repeat() function when building your dataset. 에러
      epochs=15,
      verbose=1,
      callbacks=[callbacks]
      )

 

반응형
Comments