如何在Tensorflow 2.0中创建训练,测试和验证拆分

时间:2019-10-15 21:37:51

标签: python tensorflow tensorflow-datasets tensorflow2.0

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

我已经为多类分类问题构建了一个tensorflow数据集。我们称之为labeled_ds。我已经通过从各自的类明智目录中加载所有图像文件来准备此数据集。我在这里按照本教程进行操作:tensorflow guide to load image dataset

现在,我需要将labeld_ds分成三个不相交的部分:训练,验证和测试。我正在使用tensorflow API,但是没有示例可以指定分割百分比。我在load method中找到了一些东西,但不确定如何使用。此外,如何获得拆分结果以进行分层?

# 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"])

我一直被困在这里,不胜感激如何从这里获得任何建议。预先感谢。

3 个答案:

答案 0 :(得分:0)

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

!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)

答案 1 :(得分:0)

我有same problem

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

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)

答案 2 :(得分:0)

Francesco Boi Soultion 对我很有用。

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