我发现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。
有人有任何想法如何控制这种行为?
答案 0 :(得分:0)
我已经使用python 3.5从存档in version 4.2.0安装了Anaconda,然后我用pip安装了tensorflow-gpu,而不是用conda。
故障消失了。