#python #tensorflow #keras #deep-learning #k-fold
Вопрос:
Я не могу загрузить весь свой набор данных сразу, поэтому я использовал tf.keras.preprocessing.image_dataset_from_directory()
его для загрузки пакетов изображений во время обучения. Это хорошо работает, если я хочу разделить свой набор данных на 2 подмножества (обучение и проверка), однако я хотел бы разделить свой набор данных на K складок, чтобы выполнить перекрестную проверку. (5 складок было бы неплохо)
Как я могу сделать K-складки, не загружая весь свой набор данных ? Должен ли я отказаться от использования tf.keras.preprocessing.image_dataset_from_directory()
?
Ответ №1:
Лично я рекомендую вам переключиться на tf.data.Dataset()
.
Это не только более эффективно, но и дает вам больше гибкости в плане того, что вы можете реализовать.
Допустим, у вас есть изображения( image_paths
) и labels
в качестве примера.
Таким образом, вы могли бы создать конвейер, подобный:
training_data = []
validation_data = []
kf = KFold(n_splits=5,shuffle=True,random_state=42)
for train_index, val_index in kf.split(images,labels):
X_train, X_val = images[train_index], images[val_index]
y_train, y_val = labels[train_index], labels[val_index]
training_data.append([X_train,y_train])
validation_data.append([X_val,y_val])
Тогда вы могли бы создать что-то вроде:
for index, _ in enumerate(training_data):
x_train, y_train = training_data[index][0], training_data[index][1]
x_valid, y_valid = validation_data[index][0], validation_data[index][1]
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_dataset = train_dataset.map(mapping_function, num_parallel_calls=tf.data.experimental.AUTOTUNE)
train_dataset = train_dataset.batch(batch_size)
train_dataset = train_dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
validation_dataset = tf.data.Dataset.from_tensor_slices((x_valid, y_valid))
validation_dataset = validation_dataset.map(mapping_function, num_parallel_calls=tf.data.experimental.AUTOTUNE)
validation_dataset = validation_dataset.batch(batch_size)
validation_dataset = validation_dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
model.fit(train_dataset,
validation_data=validation_dataset,
epochs=epochs,
verbose=2)
Комментарии:
1. Спасибо вам за вашу помощь. Итак, я должен указать путь к изображениям в переменной «изображения», а затем загрузить их в функцию mapping_function ?
2. Точно. Функция отображения как логика должна иметь такие методы, как image = tf.io.decode_jpg(путь к изображению,каналы=3) и т. Д.
3. Или другую обработку, которую вы хотели бы реализовать 😀