Как преобразовать генератор питона в объект Keras Sequence? - PullRequest
1 голос
/ 17 апреля 2019

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

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

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

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

Я выяснил, как загрузить их с помощью генератора Python.Тем не менее, при использовании многопроцессорной обработки рекомендуется использовать класс последовательностей 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?

Спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019
  class MyBatchGenerator(Sequence):
    def __init__(self, C):
        self.C = C

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

    def __getitem__(self, idx):   

        n = self.C[idx]
        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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...