AttributeError: объект ‘SequenceGenerator’ не имеет атрибута ‘shape’ пользовательского генератора последовательностей Keras 2.2.4

#python #keras #sequence #google-colaboratory

#python #keras #последовательность #google-colaboratory

Вопрос:

Я пытаюсь использовать fit_generator с пользовательским train_sequence_generator и пользовательским test_sequence_generator , я получил ошибку ниже. пожалуйста, посоветуйте, где мне следует изменить свой код.

1. Пользовательский класс Sequence:

 import os
import numpy as np
from keras.utils import Sequence
from batchGenerator import BatchGenerator

from settings import  batch_size, train_folder, test_folder


class SequenceGenerator(Sequence):
    def __init__(self, batches_folder):
        self.batch_generator = BatchGenerator(folder_name=batches_folder)      
        self.names = [f for f in os.listdir(batches_folder) if f.lower().endswith('.jpg')]

    def __len__(self):
        return int(np.ceil(len(self.names) / float(batch_size)))

    def __getitem__(self, idx):
        print('Getting a bacth{0}'.format(idx))
        [X_batch, Y_batch] = self.batch_generator.load_batch_from_disk(idx)

        return X_batch, Y_batch


def train_seq_genenrator():
    return SequenceGenerator(train_folder)


def test_seq_generator():
    return SequenceGenerator(test_folder)
  

2. Fit_generator в CoLab

 from sequenceGenerator import train_seq_genenrator, test_seq_generator

history = new_model.fit_generator(train_seq_genenrator()
                        , steps_per_epoch=num_train_samples // batch_size                        
                        , validation_data=test_seq_generator()
                        , validation_steps=num_test_samples // batch_size
                        , epochs=epochs
                        , shuffle=False)
  

3. Ошибка

 -----------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-ad1d08859faf> in <module>()
      4                         , validation_steps=num_test_samples // batch_size
      5                         , epochs=epochs
----> 6                         , shuffle=False)

/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)
   1424         use_multiprocessing=use_multiprocessing,
   1425         shuffle=shuffle,
-> 1426         initial_epoch=initial_epoch)
   1427 
   1428   def evaluate_generator(self,

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training_generator.py in model_iteration(model, data, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch, mode, batch_size, **kwargs)
    113       batch_size=batch_size,
    114       epochs=epochs - initial_epoch,
--> 115       shuffle=shuffle)
    116 
    117   do_validation = validation_data is not None

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training_generator.py in convert_to_generator_like(data, batch_size, steps_per_epoch, epochs, shuffle)
    375 
    376   # Create generator from NumPy or EagerTensor Input.
--> 377   num_samples = int(nest.flatten(data)[0].shape[0])
    378   if batch_size is None:
    379     raise ValueError('You must specify `batch_size`')

AttributeError: 'SequenceGenerator' object has no attribute 'shape'
  

Комментарии:

1. вы исправили эту проблему? Я испытываю аналогичную ошибку

Ответ №1:

Установка Keras и TensorFlow в новой среде anaconda, а затем запуск процесса обучения решили проблему для меня.