Your input ran out of data; interrupting training

Вылезает ошибка недостатка данных. Примерно 4-5 дней назад этой ошибки на этом же коде не было. Код создания модели:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(27, 48, 1)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.compile(loss="categorical_crossentropy", optimizer="adam",
              metrics=["accuracy"])

Код обучения

datagen = ImageDataGenerator()
dirTrain = "/content/GeneratedI/train"
train_data = datagen.flow_from_directory(dirTrain, target_size=(27, 48), batch_size=100,
                                         class_mode="categorical", color_mode="grayscale")
dirVal = "/content/GeneratedI/val"
validation_data = datagen.flow_from_directory(dirVal, target_size=(27, 48), batch_size=100,
                                              class_mode="categorical", color_mode="grayscale")
print("Training the network...")
t_start = time.time()
history = model.fit_generator(train_data,
                              steps_per_epoch=60000 // 10,
                              epochs=1,
                              validation_data=validation_data,
                              validation_steps=10000 // 10)
print(time.time() - t_start)

Собственно изображения точно есть, 60к на обучение и 10к на валидацию. Даже вывод это подтверждает:

Found 60000 images belonging to 10 classes.
Found 10000 images belonging to 10 classes.

Использую Google Colaboratory


Ответы (1 шт):

Автор решения: feeeper
history = model.fit_generator(train_data,
                              steps_per_epoch=60000 // 10,  # <-- 1
                              epochs=1,
                              validation_data=validation_data,
                              validation_steps=10000 // 10)  # <-- 2

В первом и втором случае делить требуется на размер батча. У вас это 100, судя по генератору:

train_data = datagen.flow_from_directory(dirTrain, 
                                         target_size=(27, 48), 
                                         batch_size=100,  # <-- 3
                                         class_mode="categorical", 
                                         color_mode="grayscale")
→ Ссылка