Обучение CNN с использованием ImageDataGenerator, и обучение завершается сбоем после второй эпохи.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Обучение CNN с использованием ImageDataGenerator, и обучение завершается сбоем после второй эпохи.

Сообщение Anonymous »

Я обучал CNN с помощью ImageDataGenerator и столкнулся с проблемой, когда после второй эпохи возникает ошибка атрибута.
Модель следующая
< h1>Модель

Код: Выделить всё

import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop

def create_model():
'''Creates a CNN with 4 convolutional layers'''
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])

model.compile(loss='binary_crossentropy',
optimizer=RMSprop(learning_rate=1e-4),
metrics=['accuracy'])

return model

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
train_dir,  # This is the source directory for training images
target_size=(150, 150),  # All images will be resized to 150x150
batch_size=20,
# Since we use binary_crossentropy loss, we need binary labels
class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary',
shuffle= False)

EPOCHS = 20

model = create_model()

history = model.fit(
train_generator,
steps_per_epoch=100,  # 2000 images = batch_size * steps
epochs=EPOCHS,
validation_data=validation_generator,
validation_steps=50,  # 1000 images = batch_size * steps
verbose=2)
Вывод

Код: Выделить всё

AttributeError                            Traceback (most recent call last)
Cell In[15], line 8
5 model = create_model()
7 # Train the model
----> 8 history = model.fit(
9       train_generator,
10       steps_per_epoch=100,  # 2000 images = batch_size * steps
11       epochs=EPOCHS,
12       validation_data=validation_generator,
13       validation_steps=50,  # 1000 images = batch_size * steps
14       verbose=2)

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\keras\src\utils\traceback_utils.py:122, in filter_traceback..error_handler(*args, **kwargs)
119     filtered_tb = _process_traceback_frames(e.__traceback__)
120     # To get the full stack trace, call:
121     # `keras.config.disable_traceback_filtering()`
--> 122     raise e.with_traceback(filtered_tb) from None
123 finally:
124     del filtered_tb

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\keras\src\backend\tensorflow\trainer.py:354, in TensorFlowTrainer.fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)
333         self._eval_epoch_iterator = TFEpochIterator(
334             x=val_x,
335             y=val_y,
...
355     }
356     epoch_logs.update(val_logs)
358 callbacks.on_epoch_end(epoch, epoch_logs)

AttributeError: 'NoneType' object has no attribute 'items'
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
Я попробовал следующие шаги отладки:
  • обновление Tensorflow и Keras
    < li>попробовал более простую нейронную сеть, чтобы увидеть, есть ли в ней та же проблема, но она сработала нормально.
  • Вместо того, чтобы передавать validation_generator в model.fit(), делать это вручную, используя numpy, но это также не сработало, поскольку для него точность и ошибка обучающих данных были равны 0, только для четных эпох.
Также проверили проверку данные загружены правильно.
Версия Python: 3.11.9
Версия Tensorflow: 2.17.0
Версия Keras: 3.4.1

Подробнее здесь: https://stackoverflow.com/questions/788 ... -2nd-epoch
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»