如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?
How to perform sklearn style train-test split on feature and label tensors using built in tensorflow methods?
重新发布我的original question,因为即使在显着提高清晰度之后,它也没有被社区恢复。
我正在寻找一种使用 TensorFlow 内置方法将特征和相应标签数据拆分为训练和测试的方法。我的数据已经在两个张量中(即 tf.Tensor
对象),名为 features
和 labels
.
我知道如何使用 sklearn.model_selection
轻松地为 numpy 数组执行此操作,如 post. Additionally, I was pointed to this which requires the data to be in a single tensor. Also, I need the train and test sets to be disjoint, unlike in this 所示(这意味着它们在拆分后不能有公共数据点)。
我正在寻找一种使用 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)
您可以通过以下方式使用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
提取 train/test 的相关部分
重新发布我的original question,因为即使在显着提高清晰度之后,它也没有被社区恢复。
我正在寻找一种使用 TensorFlow 内置方法将特征和相应标签数据拆分为训练和测试的方法。我的数据已经在两个张量中(即 tf.Tensor
对象),名为 features
和 labels
.
我知道如何使用 sklearn.model_selection
轻松地为 numpy 数组执行此操作,如 post. Additionally, I was pointed to this
我正在寻找一种使用 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)
您可以通过以下方式使用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