Tensorflow 导致 scikit-learn 出错

Posted

技术标签:

【中文标题】Tensorflow 导致 scikit-learn 出错【英文标题】:Tensorflow causes errors in scikit-learn 【发布时间】:2018-08-10 02:46:39 【问题描述】:

当我在导入 tensorflow 之前导入 scikit-learn 时,我没有任何问题。运行此代码块会产生 1.7766212763101197e-12 的输出。

import numpy as np
np.random.seed(123)
import numpy.random as rand
from sklearn.decomposition import PCA
import tensorflow as tf

X = rand.randn(100,15)
X = X - X.mean(axis=0)
mod = PCA()
w = mod.fit_transform(X)
h = mod.components_
print(np.sum(np.abs(X-np.dot(w,h))))

但是,如果我在导入 scikit-learn 之前导入 tensorflow,我的代码将不再起作用。当我运行这个代码块时

import tensorflow as tf
import numpy as np
np.random.seed(123)
import numpy.random as rand
from sklearn.decomposition import PCA

X = rand.randn(100,15)
X = X - X.mean(axis=0)
mod = PCA()
w = mod.fit_transform(X)
h = mod.components_
print(np.sum(np.abs(X-np.dot(w,h))))

我得到 130091393261440.25 的输出。

这是为什么呢?我的软件包版本是:

numpy - 1.13.1

sklearn - 0.19.0

张量流 - 1.3.0

【问题讨论】:

我也无法在 python2 和 python3 上使用给定的代码 sn-p 重现您的问题。您是否能够在多次运行中重复该问题?如果是,请发布有关您的系统的更多信息。 是的,这是一个一贯的问题。这也是其他 sklearn 包(ICA、NMF)的问题。我用蟒蛇。 [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] 在 linux 上。 有没有办法以某种方式保存运行并将其发布在此处? 【参考方案1】:

导入顺序不应影响输出,因为 python 模块是自包含的,除了依赖关系。

我无法重现您的错误,并且两个代码块的输出均为 1.7951539777252834e-12。

这是一个有趣的问题,我很想知道其他人是否可以为您看到此问题的原因提供更好的回应。

【讨论】:

【参考方案2】:

注意:目前的答案是对那些在 Scikit-Learn 中寻找使用 TensorFlow 的人的标题的答案,而不仅仅是像您遇到的一些导入错误。

您可以使用 Neuraxle 在 Scikit-Learn 管道中使用 TensorFlow。

Neuraxle 是 Scikit-Learn 的扩展,使其与所有深度学习库更加兼容。

问题:您无法使用 Joblib 无法“按原样”序列化的步骤来并行化或保存管道(例如:TensorFlow 步骤)

而步骤是scikit-learn Pipeline 中的转换器或估计器。

这个问题只会在使用 Scikit-Learn 的某些时候出现。这就是不归路:您已经编写了整个生产流水线,但是一旦您对其进行了训练并选择了最佳模型,您就会意识到您刚刚编写的代码无法序列化。

这意味着一旦经过训练,您的管道就无法保存到磁盘,因为它的一个步骤会从以另一种语言编码的怪异 python 库导入内容和/或使用 GPU 资源。你的代码闻起来很奇怪,你开始为一整年的研究开发感到恐慌。

代码示例解决方案:

这是一个从 A 到 Z 的完整项目示例,其中TensorFlow is used with Neuraxle as if it was used with Scikit-Learn。

这是另一个实际的例子,TensorFlow is used within a scikit-learn-like pipeline

这个技巧是通过使用Neuraxle-TensorFlow 来执行的。

这是为了利用Neuraxle's savers。


另请阅读:https://***.com/a/60557192/2476920

【讨论】:

以上是关于Tensorflow 导致 scikit-learn 出错的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow 导入导致 numpy 计算错误

Tensorflow 导致 scikit-learn 出错

VS 2019,Tensorflow 2.6 C++,tensorflow::TensorInfo name()导致The procedure entry point could not be loc

TensorFlow 数据集导致内核在迭代期间终止进程

Tensorflow 2.0:自定义 keras 指标导致 tf.function 回溯警告

tensorflow状态下的未知变量导致训练操作出错