如何用tf.keras.preprocessing.image_dataset_from_directory()生成训练集、验证集和测试集,三者比例为6:2:2,并分成三个文件夹
时间: 2024-05-29 22:13:50 浏览: 123
好的,您可以按照以下步骤来生成训练集、验证集和测试集,并分成三个文件夹,比例为6:2:2:
1. 确定图片文件夹的路径,然后使用 tf.keras.preprocessing.image_dataset_from_directory() 函数加载数据集。例如,如果图片文件夹的路径为 '/path/to/image_folder',可以使用下面的代码加载数据集:
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
'/path/to/image_folder',
labels='inferred',
label_mode='categorical',
validation_split=0.2,
subset='training',
seed=123,
image_size=(224, 224),
batch_size=32)
2. 这里使用了 validation_split 参数来将数据集分成训练集和验证集。例如,如果要将数据集分成 6:2:2 的比例,可以将 validation_split 参数设置为 0.2。这将会将 20% 的数据集分到验证集中,其余 80% 分到训练集中。
3. 接下来,您需要将训练集和验证集按照比例 6:2 的比例再次分成两个子集,用于训练和验证。可以使用 tf.data.experimental.cardinality() 函数获取数据集的大小,然后根据大小计算训练集和验证集的大小。
4. 最后,您可以使用 tf.data.Dataset.take() 和 tf.data.Dataset.skip() 函数将数据集分成若干部分,并保存到不同的文件夹中。例如,如果您希望将数据集分成三个文件夹 train、val 和 test,并按照比例 6:2:2 分配数据,可以按照以下方式操作:
# 计算训练集大小
train_size = tf.data.experimental.cardinality(train_ds).numpy()
# 计算验证集大小
val_size = int(train_size * 0.2)
# 计算测试集大小
test_size = int(train_size * 0.2)
# 计算训练集、验证集和测试集分割点
train_end = train_size - val_size - test_size
val_end = train_size - test_size
# 分割训练集
train_data = train_ds.take(train_end)
val_data = train_ds.skip(train_end).take(val_size)
test_data = train_ds.skip(val_end)
# 保存数据集到文件夹
tf.data.experimental.save(train_data, 'train')
tf.data.experimental.save(val_data, 'val')
tf.data.experimental.save(test_data, 'test')
注意,这里的数据集是通过 tf.data.experimental.save() 函数保存到文件夹中的。您可以使用相同的函数将数据集从文件夹中加载回来。
阅读全文