У меня есть набор данных изображений в файлах TFRecord. Теперь, после прочтения набора данных TFRecord, я хочу разделить этот набор данных на разделение Train-Validation, поэтому я использовал следующую технику:
train_ds_size = int(full_ds_size * 0.8)
full_ds = full_ds.shuffle(1024)
train_ds = full_ds.take(train_ds_size).repeat().batch(32).prefetch(AUTO)
valid_ds = full_ds.skip(train_ds_size).batch(32).cache().prefetch(AUTO)
Здесь сначала я перетасовываю полный набор данных, а после использования .take()
и .skip()
для создания набора данных проверки. Поэтому мой вопрос заключается в том, что когда я обращаюсь к набору данных во время обучения модели, он сначала берет полный набор данных в память и разбивает набор данных на train_ds
и valid_ds
? Как здесь .shuffle()
будет работать? Будет ли он просто брать 1024 изображения в памяти и давать мне пакеты для обучения и проверки или загружать полный набор данных, разделять его и выдавать пакеты? Меня больше всего беспокоит то, как он будет использовать основную память во время тренировки.