如何使用 tensorflow 数据集训练 sklearn 模型?

Posted

技术标签:

【中文标题】如何使用 tensorflow 数据集训练 sklearn 模型?【英文标题】:How to train sklearn models using tensorflow dataset? 【发布时间】:2021-05-13 01:31:02 【问题描述】:

我想知道是否可以使用 Tensorflow 数据集来训练 scikit-learn 和其他 ML 框架。

那么,例如,我可以使用tf.data.dataset 来训练 xgboost、LogisticReg、RandomForest 分类器等吗? 即我可以将tf.data.dataset 对象传递到这些模型的.fit() 方法中进行训练吗?

我试过了:

    xs=np.asarray([i for i in range(10000)]).reshape(-1, 1)
    ys=np.asarray([int(i%2==0)for i in range(10000)])
    
    xs = tf.data.Dataset.from_tensor_slices(xs)
    ys = tf.data.Dataset.from_tensor_slices(ys)
    cls.fit(xs, ys)

我收到以下错误:

    TypeError: float() argument must be a string or a number, not 'TensorSliceDataset'

【问题讨论】:

这能回答你的问题吗? How to convert a tf.data.dataset for other ml models 使用 tf.data 创建的数据集只能与 tensorflow 预制估计器、tensorflow 自定义估计器和 tf.keras 模型一起使用。如果您想将 tensorflow 数据集与其他 ML 框架一起使用,您需要将数据转换为兼容的格式,例如:数据框、数组、列表等。如果您想继续使用tf,您可以参考预制估算器列表here. 【参考方案1】:

您可以使用as_numpy_iterator() 方法;来自docs:

返回一个迭代器,它将数据集的所有元素转换为 numpy。

按照你的例子:

from sklearn.svm import SVC

x = list(xs.as_numpy_iterator())
y = list(ys.as_numpy_iterator())

clf = SVC(gamma='auto')

clf.fit(x, y)

【讨论】:

我想问题是关于,从 tf.data API 创建的数据集是否与除 tensorflow 估计器或 tf.keras 模型以外的任何其他模型一起使用 是的,在这种情况下,@SwapnilMasurekar 的格式与 Sklearn 模型不兼容,因此您可以简单地调用 as_numpy_iterator() 以返回与 sklearn 模型兼容的格式。你有什么想法? 它肯定会起作用,并且是内置 tensorflow_datasets 和 tfrecord 数据集与其他框架一起使用的绝佳解决方案。但不建议将原始数据转换为tf.data.dataset obj 并将其重新转换为兼容格式

以上是关于如何使用 tensorflow 数据集训练 sklearn 模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TensorFlow 中使用我自己的数据将图像拆分为测试和训练集

将图像数组和标签数据帧拆分为训练、测试和验证集

如何使用 Tensorflow 2.0 数据集在训练时执行 10 次裁剪图像增强

如何使用Tensorflow数据集进行CNN模型训练

如何拆分自己的数据集以在 Tensorflow CNN 中进行训练和验证

在自己的数据集上训练 TensorFlow 对象检测