Tensorflow вызывает ошибки в scikit-learn

Когда я импортирую scikit-learn перед импортом tenorflow, у меня не возникает никаких проблем. Запуск этого блока кода приводит к выводу 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))))

Однако, если я импортирую tenorflow перед импортом scikit-learn, мой код больше не работает. Когда я запускаю этот кодовый блок

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

склеарн - 0.19.0

тензор потока - 1,3,0

1 ответ

Порядок импорта не должен влиять на вывод, так как модули Python являются автономными, за исключением случая зависимостей.

Я не смог воспроизвести вашу ошибку и получить вывод 1.7951539777252834e-12 для обоих блоков кода.

Это интересная проблема, и мне любопытно посмотреть, смогут ли другие дать лучший ответ, почему вы видите эту проблему.

Примечание: настоящий ответ является ответом на заголовок для тех, кто ищет использование TensorFlow в Scikit-Learn, и не только касается некоторых ошибок импорта, как это было у вас.

Вы можете использовать TensorFlow в конвейерах Scikit-Learn с помощью Neuraxle.

Neuraxle - это расширение Scikit-Learn, делающее его более совместимым со всеми библиотеками глубокого обучения.

Проблема: вы не можете распараллелить или сохранить конвейеры с помощью шагов, которые не могут быть сериализованы Joblib "как есть" (например, шаг TensorFlow)

В то время как шаг - это преобразователь или оценщик в конвейере scikit-learn.

Эта проблема всплывет только после некоторого момента использования Scikit-Learn. Это точка невозврата: вы закодировали весь свой производственный конвейер, но как только вы его обучили и выбрали лучшую модель, вы понимаете, что то, что вы только что кодировали, нельзя сериализовать.

Это означает, что после обучения ваш конвейер не может быть сохранен на диски, потому что один из его шагов импортирует вещи из странной библиотеки Python, закодированной на другом языке, и / или использует ресурсы графического процессора. Ваш код странно пахнет, и вы начинаете паниковать из-за того, что прошел полный год исследований.

Решение с примерами кода:

Вот полный пример проекта от А до Я, где TensorFlow используется с Neuraxle, как если бы он использовался с Scikit-Learn.

Вот еще один практический пример, где TensorFlow используется в конвейере, подобном scikit-learn.

Уловка выполняется с помощью Neuraxle-TensorFlow.

Это необходимо для использования спасателей Neuraxle.


Читайте также: /questions/20811868/budet-li-scikit-learn-ispolzovat-gpu/55402246#55402246

Другие вопросы по тегам