Как вы передаете данные проверки в Keras, используя последовательность?

#python #tensorflow #machine-learning #keras #generator

#python #тензорный поток #машинное обучение #keras #генератор

Вопрос:

Просматривая документацию TensorFlow, в ней говорится, что model.fit(validation_data) ее нельзя использовать с keras.utils.Sequence

Обратите внимание, что validation_data не поддерживает все типы данных, которые поддерживаются в x, например, dict, generator или keras.utils.Последовательность.

Мой набор проверки, вероятно, достаточно мал, чтобы поместиться в ОЗУ, но я бы хотел избежать загрузки всего этого в ОЗУ на случай, если мой набор данных будет расти.

Чтобы получить представление о том, как работает моя текущая последовательность, вот код:

Примечания:

  • Последовательность в настоящее время обрабатывает только train_data тот, который представляет собой нормализованный массив, содержащий мои примеры и метки. У меня есть похожие массивы для val_data и test_data .
  • Этот цикл может показаться немного странным, потому что я работаю с данными временных рядов, которые открывают окно для каждого примера.
 class MyGenerator(tf.keras.utils.Sequence):
    'Generates data for Keras'
    def __init__(self, ids, train_dir):
        'Initialization'
        self.ids = ids
        self.train_dir = train_dir

    def __len__(self):
        'Denotes the number of batches per epoch'
        return len(self.ids)

    def __getitem__(self, index):
        batch_id = self.ids[index]
        # load data
        X_train, y_train = [], []
        start_index = seq_len*batch_id
        end_index = start_index   seq_len
        for i in range(start_index, end_index):  
            start_seq = i   start_index
            X_train.append(train_data[i-seq_len:i])  
            y_train.append(train_data[:, 4][i]) 
        # Save our batch
        X = np.array(X_train)
        y = np.array(y_train)

        return X, y
 

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

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

1. Я думаю, что одним из обходных путей было бы использование tf.data.Dataset.from_generator( mygen ) , поскольку это поддерживается validation_data . Однако я думаю, что для этого потребуется __iter__() метод, реализованный в вашем генераторе.

Ответ №1:

Согласно документации:

validation_data может быть:

  • Кортеж (x_val, y_val) массивов Numpy или тензоров
  • Кортеж (x_val, y_val, val_sample_weights) массивов Numpy
  • набор данных

Для первых двух случаев необходимо указать batch_size . Для последнего случая может быть предоставлен validation_steps .

Таким образом, путем предоставления batch_size или validation_steps validation_data будет обрабатываться пакетами.