如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?

Posted

技术标签:

【中文标题】如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?【英文标题】:How to perform sklearn style train-test split on feature and label tensors using built in tensorflow methods? 【发布时间】:2021-01-05 23:54:05 【问题描述】:

重新发布我的original question,因为即使在对清晰度进行了重大改进之后,社区也没有恢复它。

我正在寻找一种使用 TensorFlow 内置方法将特征和相应标签数据拆分为训练和测试的方法。我的数据已经存在于两个张量中(即tf.Tensor 对象),名为featureslabels

我知道如何使用sklearn.model_selection 轻松为numpy 数组执行此操作,如post 所示。此外,我被指出了这个method,它要求数据位于单个张量中。另外,我需要训练集和测试集是不相交的,这与 method 不同(这意味着它们在拆分后不能有共同的数据点)。

我正在寻找一种方法来使用 Tensorflow 中的内置方法来做同样的事情。

我的需求可能条件太多,但基本上需要的是与Tensorflow中sklearn.model_selection.train_test_split()等价的方法,如下所示:

import tensorflow as tf

X_train, X_test, y_train, y_test = tf.train_test_split(features,
                                                labels,
                                                test_size=0.1,
                                                random_state=123)

【问题讨论】:

我的回答对你有帮助吗@Hawklaz? 好的,谢谢。我希望有一个直接的函数来完成它,类似于它在 sklearn 中的完成方式。但这行得通。 【参考方案1】:

您可以通过以下方式使用TF来实现这一点

from typing import Tuple

import tensorflow as tf


def split_train_test(features: tf.Tensor,
                     labels: tf.Tensor,
                     test_size: float,
                     random_state: int = 1729) -> Tuple[tf.Tensor, tf.Tensor, tf.Tensor, tf.Tensor]:

    # Generate random masks
    random = tf.random.uniform(shape=(tf.shape(features)[0],), seed=random_state)
    train_mask = random >= test_size
    test_mask = random < test_size

    # Gather values
    train_features, train_labels = tf.boolean_mask(features, mask=train_mask), tf.boolean_mask(labels, mask=train_mask)
    test_features, test_labels = tf.boolean_mask(features, mask=test_mask), tf.boolean_mask(labels, mask=test_mask)

    return train_features, test_features, train_labels, test_labels

我们在这里所做的是首先创建一个随机均匀张量,其大小与数据长度相同。 然后我们根据test_size给出的比率创建布尔掩码,最后我们使用tf.boolean_mask提取相关部分进行训练/测试

【讨论】:

以上是关于如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?的主要内容,如果未能解决你的问题,请参考以下文章

张量流随机森林回归

张量流模型不更新权重

张量流对象检测训练中的标签文件

logits 和标签大小的问题。张量流

如何使用张量流数据集 (TDFS) 作为张量流模型的输入?

Keras和张量流连接和拟合错误