Python model.fit_generator застревает в первую эпоху и пытается вычислить «неизвестное» количество шагов - PullRequest
0 голосов
/ 16 апреля 2020

Я очень новичок в python и моделях классификации изображений, но у меня есть некоторый код тензорного потока, который до недавнего времени работал нормально. Когда я добираюсь до этой части кода, я внезапно сталкиваюсь с проблемой. Я бегу через ноутбуки Google Colab.

epochs = 5

history = model.fit_generator(train_generator, 
                    epochs=epochs,                 
                    validation_data=val_generator)

Fit_generator не может рассчитать количество шагов за эпоху и выводит его как неизвестное. Затем первая эпоха просто продолжается, не останавливаясь с точностью, медленно увеличивающейся до 1, если я оставлю ее достаточно долго. никогда не пройти эпоху 1?

Вот еще некоторая информация из кода, которая может иметь отношение (размер обучения 1602 и тест 395 с 11 различными классами):

Found 1602 images belonging to 11 classes.
Found 395 images belonging to 11 classes.

размер партии было установлено значение 64

for image_batch, label_batch in train_generator:
  break
image_batch.shape, label_batch.shape
((64, 224, 224, 3), (64, 11))
IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)

# Create the base model from the pre-trained model MobileNet V2
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                              include_top=False, 
                                              weights='imagenet')
base_model.trainable = False
model = tf.keras.Sequential([
  base_model,
  tf.keras.layers.Conv2D(32, 3, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.GlobalAveragePooling2D(),
  tf.keras.layers.Dense(11, activation='softmax')
])

Сводка модели

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
mobilenetv2_1.00_224 (Model) (None, 7, 7, 1280)        2257984   
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 5, 5, 32)          368672    
_________________________________________________________________
dropout_2 (Dropout)          (None, 5, 5, 32)          0         
_________________________________________________________________
global_average_pooling2d_2 ( (None, 32)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 11)                363       
=================================================================
Total params: 2,627,019
Trainable params: 369,035
Non-trainable params: 2,257,984

1 Ответ

0 голосов
/ 16 апреля 2020

вы должны передать параметры steps_per_epoch и validation_steps в вашу функцию fit_generator, чтобы модель знала, сколько существует пакетов для наборов обучения и проверки.

Значения для этих параметров обычно являются числовыми примеров, разделенных на размер партии. В этом случае:

steps_per_epoch = 1602//64
validation_steps = 395//64

Тогда:

model.fit_generator(train_generator, 
                epochs=epochs,                 
                validation_data=val_generator,steps_per_epoch=1602//64, validation_steps=395//64)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...