如何使用 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 次裁剪图像增强