Как преобразовать генератор питона в объект Keras Sequence?

1

Я работаю над проблемой регрессии. Мой CNN тренируется на данных, которые имеют форму 32x513x30 - 32 экземпляра 513x30 на партию, а затем 4810 партий.

У меня есть эти партии, сохраненные в каталоге, каждый с именем "batch # number.npy".

Во время использования генератора Python я продолжаю получать предупреждение от TensorFlow:

ВНИМАНИЕ: tenorflow: использование генератора с use_multiprocessing=True и несколько рабочих могут дублировать ваши данные. Пожалуйста, рассмотрите возможность использования класса keras.utils.Sequence.

Я понял, как загрузить их с помощью генератора Python. Однако при использовании многопроцессорной обработки рекомендуется использовать класс Seras Keras: https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence

К сожалению, там все становится слишком сложно для меня. Вот код, который я использовал:

def batch_gen(num):

    os.chdir('mydirectory/train')

    for n in num:
        placeholder = np.load('batch#' + str(n) + '.npy')
        X = placeholder[:,:513,:]
        Y1= placeholder[:,513:,:]

        Y = X * Y1

        X = X / normalization # normalize X
        X = scale_mag*X.astype(np.float32)

        Y = Y / normalization 
        Y = scale_mag*Y.astype(np.float32)


        X = np.reshape(X,(32,513,30,1))
        Y = np.reshape(Y,(32,513,30,1))
        yield (X, Y)

my_gen = batch_gen(C)   # C is an array with indexes 1 to 4810 (looped by number of training epochs)

Способ, которым я использую генератор, заставляет мои данные дублироваться во время тренировки? Если так, как я мог бы перевести его в класс Sequence?

Спасибо.

Теги:
tensorflow
keras
generator
sequence

1 ответ

0
  class MyBatchGenerator(Sequence):
    def __init__(self, C):
        self.C = C

    def __len__(self):
        return len(self.C)

    def __getitem__(self, n):   

        os.chdir('mydirectory/train')

        placeholder = np.load('batch#' + str(n) + '.npy')
        X = placeholder[:,:513,:]
        Y1= placeholder[:,513:,:]

        Y = X * Y1

        X = X / normalization # normalize X
        X = scale_mag*X.astype(np.float32)

        Y = Y / normalization 
        Y = scale_mag*Y.astype(np.float32)


        X = np.reshape(X,(32,513,30,1))
        Y = np.reshape(Y,(32,513,30,1))
        return (X, Y)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню