Эпоха 1/5 не остановится.

Вопрос или проблема

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

Вот мой код…

import tensorflow as tf
import numpy as np
import os
from google.colab import drive
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow import keras
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D

training_path="drive/My Drive/tesla"
validation_path="drive/My Drive/validation"

training_generator = ImageDataGenerator(rescale=1.0/255)
validation_generator = ImageDataGenerator(rescale=1.0/255)

training_set = training_generator.flow_from_directory(batch_size=2,
                                                      directory=training_path,
                                                      target_size=(150,150),
                                                      class_mode="binary",
                                                      shuffle=True)

validation_set = validation_generator.flow_from_directory(batch_size=2,
                                                          directory=validation_path,
                                                          target_size=(150,150),

                                                          class_mode="binary")

model = keras.models.Sequential([
                                 Conv2D(8, 3, padding='same', activation='relu', input_shape=(150,150,3)),
                                 MaxPooling2D(),
                                 Conv2D(16, 3, padding='same', activation='relu'),
                                 MaxPooling2D(),
                                 Conv2D(16, 3, padding='same', activation='relu'),
                                 MaxPooling2D(),
                                 Conv2D(4, 3, activation='relu'),
                                 Flatten(),
                                 Dense(4, activation='relu'),
                                 Dense(1)

])

model.compile(optimizer="adam",
              loss=tf.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(training_set,
          validation_data=validation_set,
          epochs=5,
          verbose=1,
          validation_steps=20/2)

Но когда я запускаю свой код, он показывает это и выполняется бесконечно на первой эпохе.

Epoch 1/5
  14781/Unknown - 630s 43ms/step - loss: 4.0421e-06 - accuracy: 1.0000

Хотя размер моей обучающей выборки составляет всего 40 (20 кошек и 20 собак), а размер валидационной выборки — 20 (10 кошек и 10 собак). Я пишу код в Google Colab.

Заранее спасибо.

В вашем коде отсутствует один аргумент. Вот что поможет решить вашу проблему.

model.fit(training_set,
          training_steps= training_set.samples//training_set.batch_size,
          validation_data=validation_set,
          epochs=5,
          verbose=1,
          validation_steps=validation_set.samples//validation_set.batch_size)

Ответ или решение

Ваш код сталкивается с проблемой при обучении модели на первом эпохе, что связано с отсутствием необходимых параметров. Давайте разберем, как можно исправить вашу ситуацию.

Во-первых, важно уточнить, что для корректной работы метода fit в Keras необходимо указать количество шагов на эпоху (steps per epoch) и количество шагов на валидацию (validation steps). Эти параметры помогут вашей модели понять, сколько образцов ей необходимо обработать за одну эпоху обучения и валидации.

Вот рекомендация, как можно исправить ваш код:

model.fit(training_set,
          steps_per_epoch=training_set.samples // training_set.batch_size,
          validation_data=validation_set,
          epochs=5,
          verbose=1,
          validation_steps=validation_set.samples // validation_set.batch_size)

Объяснение:

  1. steps_per_epoch: Это количество шагов (или итераций), которые ваша модель должна выполнить на каждой эпохе. Так как у вас всего 40 обучающих образцов и размер партии (batch size) равен 2, вы устанавливаете steps_per_epoch = training_set.samples // training_set.batch_size, что дает вам 20. Таким образом, модель будет делать 20 обновлений весов за одну эпоху.

  2. validation_steps: Это аналогичный параметр для валидационных данных. Учитывая, что у вас есть 20 валидационных образцов и размер вашей партии также равен 2, validation_steps = validation_set.samples // validation_set.batch_size будет равен 10.

Учтите:

  • С вашим небольшим набором данных (40 обучающих образцов и 20 валидационных) модель может переобучаться, то есть достаточно быстро достигнет высокой точности на тренировочных данных, но при этом будет не очень хорошо работать на новых данных. Рассмотрите возможность использования аугментации данных или увеличения выборки для более стабильного обучения.

  • Параметр verbose=1 положительно скажется на восприятии прогресса тренировки, так как вы будете получать текстовые сообщения на каждой эпохе.

Таким образом, добавив указанные параметры, ваши тренировки не должны застревать, и модель будет корректно работать на всех этапах. Если проблемы сохраняются, убедитесь, что ваши данные корректно загружаются и не содержат ошибок.

Оцените материал
Добавить комментарий

Капча загружается...