#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
будет обрабатываться пакетами.