如何在 TensorFlow 中使用我自己的数据将图像拆分为测试集和训练集
How to split images into test and train set using my own data in TensorFlow
我在这里有点困惑...我刚刚花了最后一个小时阅读如何在 TensorFlow 中将我的数据集拆分为 test/train。我正在按照本教程导入图像:https://www.tensorflow.org/tutorials/load_data/images。显然可以用 sklearn: model_selection.train_test_split
分成 train/test 。
但我的问题是:我什么时候将我的数据集拆分成 train/test。我已经用我的数据集完成了这个(见下文),现在呢?我该如何拆分它?我是否必须在将文件加载为 tf.data.Dataset
之前执行此操作?
# determine names of classes
CLASS_NAMES = np.array([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"])
print(CLASS_NAMES)
# count images
image_count = len(list(data_dir.glob('*/*.png')))
print(image_count)
# load the files as a tf.data.Dataset
list_ds = tf.data.Dataset.list_files(str(cwd + '/train/' + '*/*'))
此外,我的数据结构如下所示。没有测试文件夹,没有 val 文件夹。我需要从那组火车中抽出 20% 来进行测试。
train
|__ class 1
|__ class 2
|__ class 3
您可以使用 tf.keras.preprocessing.image.ImageDataGenerator
:
image_generator = tf.keras.preprocessing.image.ImageDataGenerator(validation_split=0.2)
train_data_gen = image_generator.flow_from_directory(directory='train',
subset='training')
val_data_gen = image_generator.flow_from_directory(directory='train',
subset='validation')
请注意,您可能需要为发电机设置其他 data-related parameters。
更新: 您可以通过 skip()
和 take()
获取数据集的两个切片:
val_data = data.take(val_data_size)
train_data = data.skip(val_data_size)
如果您将所有数据都放在同一个文件夹中并想使用 tf.data
拆分为 validation/testing,请执行以下操作:
list_ds = tf.data.Dataset.list_files(str(cwd + '/train/' + '*/*'))
image_count = len(list(data_dir.glob('*/*.png')))
val_size = int(image_count * 0.2)
train_set = list_ds.skip(val_size)
val_set = list_ds.take(val_size)
我在这里有点困惑...我刚刚花了最后一个小时阅读如何在 TensorFlow 中将我的数据集拆分为 test/train。我正在按照本教程导入图像:https://www.tensorflow.org/tutorials/load_data/images。显然可以用 sklearn: model_selection.train_test_split
分成 train/test 。
但我的问题是:我什么时候将我的数据集拆分成 train/test。我已经用我的数据集完成了这个(见下文),现在呢?我该如何拆分它?我是否必须在将文件加载为 tf.data.Dataset
之前执行此操作?
# determine names of classes
CLASS_NAMES = np.array([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"])
print(CLASS_NAMES)
# count images
image_count = len(list(data_dir.glob('*/*.png')))
print(image_count)
# load the files as a tf.data.Dataset
list_ds = tf.data.Dataset.list_files(str(cwd + '/train/' + '*/*'))
此外,我的数据结构如下所示。没有测试文件夹,没有 val 文件夹。我需要从那组火车中抽出 20% 来进行测试。
train
|__ class 1
|__ class 2
|__ class 3
您可以使用 tf.keras.preprocessing.image.ImageDataGenerator
:
image_generator = tf.keras.preprocessing.image.ImageDataGenerator(validation_split=0.2)
train_data_gen = image_generator.flow_from_directory(directory='train',
subset='training')
val_data_gen = image_generator.flow_from_directory(directory='train',
subset='validation')
请注意,您可能需要为发电机设置其他 data-related parameters。
更新: 您可以通过 skip()
和 take()
获取数据集的两个切片:
val_data = data.take(val_data_size)
train_data = data.skip(val_data_size)
如果您将所有数据都放在同一个文件夹中并想使用 tf.data
拆分为 validation/testing,请执行以下操作:
list_ds = tf.data.Dataset.list_files(str(cwd + '/train/' + '*/*'))
image_count = len(list(data_dir.glob('*/*.png')))
val_size = int(image_count * 0.2)
train_set = list_ds.skip(val_size)
val_set = list_ds.take(val_size)