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

Swa*_*oop 6 python tensorflow tensorflow-datasets tensorflow2.0

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

我为多类分类问题构建了一个张量流数据集。我们就这样称呼吧labeled_ds。我通过从各自的类目录加载所有图像文件来准备这个数据集。我已经按照这里的教程进行操作:tensorflowguide to load image dataset

现在,我需要分成labeld_ds三个不相交的部分:训练、验证和测试。我正在查看tensorflow API,但没有允许指定分割百分比的示例。我在load 方法中找到了一些东西,但我不知道如何使用它。此外,我怎样才能对分割进行分层?

# 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"])
Run Code Online (Sandbox Code Playgroud)

我被困在这里,非常感谢任何有关如何从这里取得进展的建议。提前致谢。

bsq*_*are 2

请参考下面的代码,使用张量流数据集“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)
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案看起来不错,但这种选择训练、测试和验证子集的方法并不能确保数据“分层”。术语“分层”意味着所有类别(在所有三个子集中)的样本比例相等。 (4认同)