머신러닝/머신러닝
[헷갈리는 개념 정리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]
)
반응형