在训练和测试数据集中随机分割tf数据集

时间:2018-09-25 21:27:33

标签: tensorflow tensorflow-datasets

是否存在使用数据集api将tf数据集随机分为子数据集的推荐方法?知道我正在对大约150个文件(大约1TB)使用生成器功能。我想在读取时随机拆分这些数据集,因此无需再次保存这些文件。

2 个答案:

答案 0 :(得分:1)

您可以使用sklearn的KFold函数

<annotation>
    <folder>VOC2007</folder>
    <filename>abc.jpg</filename>
    <object>
        <name>blah</name>
        <pose>unknown</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>0</xmin>
            <ymin>0</ymin>
            <xmax>0</xmax>
            <ymax>0</ymax>
        </bndbox>
    </object>
</annotation>
  

K-folds交叉验证器

     

提供训练/测试索引以将数据拆分为训练/测试集。分裂   数据集连续k折(默认情况下不进行混洗)。

     

然后将每个折叠用作一次验证,而剩下的k-1   折叠形成训练集。

class sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)

答案 1 :(得分:0)

tf.data开发人员本身没有官方推荐。 如果您正在寻找一小部分数据作为验证数据,则可以使用take()skip()函数创建验证并进行训练拆分。

val_dataset = dataset.take(num_elements)
train_dataset = dataset.skip(num_elements)

但是,良好的拆分取决于良好的改组,对于您的情况,您可能改组文件而不是数据,因为改组数据可能会更加昂贵,因此我不确定这种方法。 请注意随机播放中的reshuffle_each_iteration参数,这样当您多次遍历数据集时,不会产生不同的验证拆分。

一种更简单且一致的方法是在一个或多个单独的文件中进行验证,以便您可以将其读取为新的数据集。但这可能也不是一个更好的主意,具体取决于您的应用程序。