2017-12-09 4 views
1

私はTensorFlowの基本を、線形回帰の例を通して学習しています。よくscikit-学ぶ作品で線形回帰を実行:テンソルフローインポートがnumpy計算エラーの原因となる

import numpy as np 
from sklearn.datasets import fetch_california_housing 
from sklearn.linear_model import LinearRegression 

housing = fetch_california_housing() 

lin_reg = LinearRegression() 
lin_reg.fit(housing.data, housing.target.reshape(-1, 1)) 

print(np.r_[lin_reg.intercept_.reshape(-1, 1), lin_reg.coef_.T]) 

は、次のような結果を返す:同じ使用numpyの(正規方程式)を実行

[[ -3.69419202e+01] 
[ 4.36693293e-01] 
[ 9.43577803e-03] 
[ -1.07322041e-01] 
[ 6.45065694e-01] 
[ -3.97638942e-06] 
[ -3.78654265e-03] 
[ -4.21314378e-01] 
[ -4.34513755e-01]] 

も正常に動作します:

m, n = housing.data.shape 
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data] 

X = housing_data_plus_bias 
y = housing.target.reshape(-1, 1) 
theta_numpy = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) 

print(theta_numpy) 

出力:

[[ -3.69419202e+01] 
[ 4.36693293e-01] 
[ 9.43577803e-03] 
[ -1.07322041e-01] 
[ 6.45065694e-01] 
[ -3.97638942e-06] 
[ -3.78654265e-03] 
[ -4.21314378e-01] 
[ -4.34513755e-01]] 
私はどちらかを実行した場合

[[ 2.91247440e+32] 
[ -1.62971964e+11] 
[ 1.42425463e+14] 
[ -4.82459003e+16] 
[ -1.33258747e+17] 
[ -2.04315813e+29] 
[ 5.51179654e+14] 
[ 5.92729561e+20] 
[ 8.86284674e+21]] 

:次の結果(別の値たび)を得

import tensorflow as tf 
import numpy as np 
from sklearn.datasets import fetch_california_housing 
from sklearn.linear_model import LinearRegression 

housing = fetch_california_housing() 

lin_reg = LinearRegression() 
lin_reg.fit(housing.data, housing.target.reshape(-1, 1)) 

print(np.r_[lin_reg.intercept_.reshape(-1, 1), lin_reg.coef_.T]) 

:私はTensorFlowをインポートするときに210

しかし、線形回帰を実行する前に、私は、変数や不正確な結果を得ますテンソルフローをインポートしてから、テンソルフローをインポートして、再度計算を繰り返すと、正しい結果が得られます。

TensorFlowをインポートした後にnumpy/scikit-learnから正しい結果が得られることを、どのようにして確認することができますか?

私はtensorflow-gpuでUnbuntu上でAnaconda 4.3.30からPython 3.5.4を実行しています。

numpy version: 1.12.1 
tensorflow version: 1.3.0 
+0

[該当するかもしれません](https://github.com/tensorflow/tensorflow/issues/14034)にリンクしている[多分関連する](https://github.com/tensorflow/tensorflow/issues/11724) 。 – sascha

+1

@saschaのリーダーに感謝します。この問題は、TensorFlowとAnacondaディストリビューションに付属しているMKLライブラリとの間の悪い相互作用に関係しているようです。 [here](https://github.com/tensorflow/tensorflow/issues/13004)に示されているように、 'export MKL_NUM_THREAD =" 1 "'を使って正しい結果を得ることができました。 – drgfreeman

答えて

1

アナコンダ分布がthis issueにし、他の参照の問題で報告されているようTensorFlowと一緒に使用する場合numpyのscipyのダウンロードとで複数の問題が発生するように思われる、デフォルトでは、インテルのマス・カーネル・ライブラリ(MKL)を使用しています。ピップから

再インストールnumpyのとscipyのダウンロードには、問題を解決します

まず、condaを使用して、必要なパッケージと新しい環境を作成します。

$ conda create --name env_name python=3.5 tensorflow-gpu scikit-learn 

は、環境をアクティブにします:

$ source activate env_name 

NumpyとSciPyをpipを使って再インストールする:

$ pip install --ignore-installed --upgrade numpy scipy 

これの欠点は、MKLによって提供されるパフォーマンスの向上から恩恵を受けることができないことです。たとえば、Scikit-Learnで構築されたサポートベクターマシンは、MKLを使用しない環境で11分間に訓練されたMKLでトレーニングするのに6分かかります。ただし、TensorFlowが必要ない場合に使用するMKL(デフォルト)を持つ別の環境を作成することはできます。

関連する問題