Вы можете просто передать объект набора данных в model.fit
, Keras будет обрабатывать итерации.
Учитывая один из готовых наборов данных:
train, test = tf.keras.datasets.cifar10.load_data()
dataset = tf.data.Dataset.from_tensor_slices((train[0], train[1]))
Это создаст объект набора данных из обучающих данных набора данных cifar10. В этом случае функция разбора не нужна.
Если вы создаете набор данных из пути, содержащего изображения из списка массивов, вам понадобится один.
dataset = tf.data.Dataset.from_tensor_slices((image_path, labels_path))
В случае, если вам понадобится функция для загрузки фактических данных из имени файла. Массив Numpy может быть обработан таким же образом, только без tf.read_file
def parse_func(filename):
f = tf.read_file(filename)
image = tf.image.decode_image(f)
label = #get label from filename
return image, label
Затем вы можете перемешать, пакетировать и отобразить любую функцию синтаксического анализа в этом наборе данных. Вы можете контролировать, сколько примеров будет предварительно загружено с помощью буфера перемешивания. Повторите контроль количества эпох и лучше не указывать ни одного, поэтому он будет повторяться бесконечно. Вы можете использовать либо обычную пакетную функцию, либо комбинировать с
dataset = dataset.shuffle().repeat()
dataset.apply(tf.data.experimental.map_and_batch(map_func=parse_func, batch_size,num_parallel_batches))
Затем объект набора данных может быть передан в model.fit
model.fit (набор данных, эпохи, steps_per_epoch). Обратите внимание, что steps_per_epoch
является необходимым параметром в этом случае, он будет определять, когда начинать новую эпоху. Так что вам придется знать размер эпохи заранее.