Я создал пользовательскую модель и теперь хочу использовать ее в Google Colab с набором данных с моего диска Google (набор данных принадлежит Google Landmark Recognition Challenge в kaggle).Я использую ImageDataGenerator (flow_from_directory) и FitGenerator.
При запуске fit_generator происходит сбой на последнем шаге первой эпохи (перед проверкой).
Я свернул набор данных и модель домаксимально сократить время выполнения и проверить, не находятся ли данные в правильной форме, но они кажутся правильными
Это фактически первая модель, которую я когда-либо создавал, и я вроде как новичок в мире ML, поэтомуя думаю, что я просто что-то здесь упускаю ..
Вот мой код (без каких-либо ненужных частей)
rotation_range=0,
width_shift_range=0,
height_shift_range=0,
shear_range=0,
zoom_range=[0.8, 1.25],
horizontal_flip=True,
vertical_flip=False,
fill_mode='reflect',
data_format='channels_last',
brightness_range=[0.5, 1.5])
test_datagen = ImageDataGenerator(
rotation_range=30,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.01,
zoom_range=[0.8, 1.25],
horizontal_flip=True,
vertical_flip=False,
fill_mode='reflect',
data_format='channels_last',
brightness_range=[0.5, 1.5])
image_size = (128,128)
batch_size = 20
train_generator=train_datagen.flow_from_directory(TRAINING_DATA_DIR,
target_size=image_size,
color_mode='rgb',
batch_size=batch_size,
class_mode='categorical',
shuffle=True)
validation_generator = test_datagen.flow_from_directory(
VALIDATION_DATA_DIR,
target_size=image_size,
color_mode='rgb',
class_mode = "categorical")
model = Sequential()
model.add(Conv2D(64, (3,3), input_shape = (image_size[0], image_size[1], 3)))
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(Flatten())
model.add(Dense(150))
model.add(Activation("relu"))
model.add(Dense(100))
model.add(Activation('softmax'))
model.summary()
model.compile(loss = "categorical_crossentropy", optimizer = optimizers.SGD(lr=0.0001, momentum=0.9), metrics=["accuracy"])
// Calculate the steps sizes
step_size_train = train_generator.n//train_generator.batch_size
step_size_validation = validation_generator.n//validation_generator.batch_size
// We define an early stopper to avoid wasting compute resources and time
early = EarlyStopping(monitor='val_acc', min_delta=0, patience=2, verbose=1, mode='auto')
networkfileName = RESULTS_PATH + "/" + MODEL_NAME + "{}" + MODEL_ENDING.format(int(time.time()))
checkpoint = ModelCheckpoint(networkfileName, monitor='val_acc', verbose=1,save_best_only=True, save_weights_only=False, mode='auto', period=1)
history = model.fit_generator(generator=train_generator,
steps_per_epoch=step_size_train,
validation_data = validation_generator,
validation_steps = step_size_validation,
epochs=5,
callbacks = [checkpoint, early],
workers=1,
use_multiprocessing=False,
verbose=1)
К сожалению, у меня нет достаточно репутации, поэтому я не могу добавить скриншот, вот ссылка: Снимок экрана исключения
Также добавлен вывод исключения здесь:
IndexError Traceback (most recent call last)
<ipython-input-63-db9c44988a08> in <module>()
7 workers=1,
8 use_multiprocessing=False,
----> 9 verbose=1)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
2175 use_multiprocessing=use_multiprocessing,
2176 shuffle=shuffle,
-> 2177 initial_epoch=initial_epoch)
2178
2179 def evaluate_generator(self,
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
214 break
215
--> 216 callbacks.on_epoch_end(epoch, epoch_logs)
217 epoch += 1
218 if callbacks.model.stop_training:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/callbacks.py in on_epoch_end(self, epoch, logs)
212 logs = logs or {}
213 for callback in self.callbacks:
--> 214 callback.on_epoch_end(epoch, logs)
215
216 def on_batch_begin(self, batch, logs=None):
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/callbacks.py in on_epoch_end(self, epoch, logs)
572 if self.epochs_since_last_save >= self.period:
573 self.epochs_since_last_save = 0
--> 574 filepath = self.filepath.format(epoch=epoch + 1, **logs)
575 if self.save_best_only:
576 current = logs.get(self.monitor)
IndexError: tuple index out of range
Спасибо вам!