如果导入tensorflow,np.linalg.svd将挂起,即使它没有以任何方式使用

时间:2017-10-16 16:19:16

标签: python numpy tensorflow python-3.6 svd

我发现np.linalg.svd在奇怪的无法解释的情况下依赖我的数据。

下面的代码从pickle文件加载我的数据并将numpy的SVD应用于它:

import sys
import numpy as np
import pickle

import tensorflow as tf
print("Tensorflow version: ", tf.__version__)

print("Python: ", sys.version_info )

print("Numpy config show:")
np.__config__.show()

with open('M_matrix.pickle', 'rb') as f:
    M_matrix = pickle.load(f)['M_matrix']
u, s, v = np.linalg.svd(M_matrix, full_matrices=False)

print("Done.")

代码行为如下:

1)如果导入了tensorflow(虽然从未使用过),并且python环境是3.6,那么代码会挂在numpy的SVD上。

2)如果未导入tensorflow,则代码不会在python 3.5或python 3.6环境中挂起(完成打印)。

3)如果python环境设置为3.5,即使导入了tensorflow,代码也不会挂起。

报告的Tensorflow版本总是1.3.0,所以我怀疑,一些二进制版本的tensorflow会以某种方式中毒numpy的SVD。

有人有任何想法如何控制这种行为?

1 个答案:

答案 0 :(得分:0)

我已经使用python 3.5从存档in version 4.2.0安装了Anaconda,然后我用pip安装了tensorflow-gpu,而不是用conda。

故障消失了。