Python 如何在tensorflow 2.0中创建培训、测试和验证拆分

Python 如何在tensorflow 2.0中创建培训、测试和验证拆分,python,tensorflow,tensorflow-datasets,tensorflow2.0,Python,Tensorflow,Tensorflow Datasets,Tensorflow2.0,我是tensorflow的新手,我已经开始使用tensorflow 2.0 我为一个多类分类问题构建了一个tensorflow数据集。让我们称之为标记的\u ds。我通过从各自的类目录加载所有图像文件来准备这个数据集。我在这里遵循了教程: 现在,我需要将labeld\u ds拆分为三个不相交的部分:训练、验证和测试。我正在浏览tensorflow API,但是没有一个示例允许指定分割百分比。我发现了一些东西,但我不知道如何使用它。此外,如何使拆分分层 # labeled_ds contains

我是tensorflow的新手,我已经开始使用tensorflow 2.0

我为一个多类分类问题构建了一个tensorflow数据集。让我们称之为
标记的\u ds
。我通过从各自的类目录加载所有图像文件来准备这个数据集。我在这里遵循了教程:

现在,我需要将labeld\u ds拆分为三个不相交的部分:训练、验证和测试。我正在浏览tensorflow API,但是没有一个示例允许指定分割百分比。我发现了一些东西,但我不知道如何使用它。此外,如何使拆分分层

# labeled_ds contains multi class data, which is unbalanced.
train_ds, val_ds, test_ds = tf.data.Dataset.tfds.load(labeled_ds, split=["train", "validation", "test"])

我被困在这里,如果您能给我一些建议,我将不胜感激。提前感谢。

请参考下面的代码,使用tensorflow数据集“oxford_flowers102”创建训练、测试和验证拆分

我有

它取决于数据集,其中大多数数据集都有一个训练集和测试集。在这种情况下,您可以执行以下操作(假设80-10-10分割):

弗朗西斯科·博伊·苏蒂翁对我很好


请参阅拆分
tf.数据的答案dataset@SWAPNILMASUREKAR提供给的解决方案将用于将数据拆分为多个子集。问题是,生成的拆分仍然不会分层。我遇到了相同的问题,似乎没有在tensorflow中找到一个解决方案来确保数据集实际上是分层的。我最终使用的解决方案是。这是一个将数据集拆分为train和validation子目录的函数,然后您可以从每个子目录创建train和validation tensorflow数据集directory@ofirdubi谢谢分享代码的链接。我也做了类似的事情,因为TensorFlow没有提供这种开箱即用的功能。解决方案看起来不错,但这种选择训练、测试和验证子集的方法无法确保数据分层。术语
分层
意味着所有类别(在所有三个子集中)的样本比例相等。谢谢你,Francesco,我在自定义数据集上寻找解决方案。但是,您的解决方案将帮助其他人使用TensorFlow提供的数据集。
!pip install tensorflow==2.0.0

import tensorflow as tf
print(tf.__version__)
import tensorflow_datasets as tfds

labeled_ds, summary = tfds.load('oxford_flowers102', split='train+test+validation', with_info=True)

labeled_all_length = [i for i,_ in enumerate(labeled_ds)][-1] + 1

train_size = int(0.8 * labeled_all_length)
val_test_size = int(0.1 * labeled_all_length)

df_train = labeled_ds.take(train_size)
df_test = labeled_ds.skip(train_size)
df_val = df_test.skip(val_test_size)
df_test = df_test.take(val_test_size)

df_train_length = [i for i,_ in enumerate(df_train)][-1] + 1
df_val_length = [i for i,_ in enumerate(df_val)][-1] + 1
df_test_length = [i for i,_ in enumerate(df_test)][-1] + 1

print('Original: ', labeled_all_length)
print('Train: ', df_train_length)
print('Validation :', df_val_length)
print('Test :', df_test_length)
splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True,
split=['train+test[:80]','train+test[80:90]', 'train+test[90:]'],
data_dir=filePath)
splits, info = tfds.load('fashion_mnist', with_info=True, as_supervised=True, split=['train+test[:80]','train+test[80:90]', 'train+test[90:]'])

(train_examples, validation_examples, test_examples) = splits