Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:转换类型为<;的对象失败;类别';scipy.sparse.csr.csr#u矩阵'&燃气轮机;到张量_Python_Tensorflow_Scikit Learn_Cosine Similarity - Fatal编程技术网

Python TypeError:转换类型为<;的对象失败;类别';scipy.sparse.csr.csr#u矩阵'&燃气轮机;到张量

Python TypeError:转换类型为<;的对象失败;类别';scipy.sparse.csr.csr#u矩阵'&燃气轮机;到张量,python,tensorflow,scikit-learn,cosine-similarity,Python,Tensorflow,Scikit Learn,Cosine Similarity,我试图用tensorflow计算350k个句子之间的余弦相似性 我的句子首先使用sklearn进行矢量化: doc = df['text'] vec = TfidfVectorizer(binary=False,norm='l2',use_idf=False,smooth_idf=False,lowercase=True,stop_words='english',min_df=1,max_df=1.0,max_features=None,ngram_range=(1, 1)) X = vec.

我试图用tensorflow计算350k个句子之间的余弦相似性

我的句子首先使用sklearn进行矢量化:

doc =  df['text']
vec = TfidfVectorizer(binary=False,norm='l2',use_idf=False,smooth_idf=False,lowercase=True,stop_words='english',min_df=1,max_df=1.0,max_features=None,ngram_range=(1, 1))
X = vec.fit_transform(doc)
print(X.shape)
print(type(X))
这非常有效,我得到了稀疏矩阵,然后我尝试了两种方法将稀疏矩阵转换为稠密矩阵

(1) 我试过这个:

dense = X.toarray()
这只适用于少量数据(大约10000句),但在实际计算中失败

(2) 我一直试图以这种方式转换输出
X
,但在执行第一步
K
时,收到相同的错误消息:

K = tf.convert_to_tensor(X, dtype=None, dtype_hint=None, name=None)
Y = tf.sparse.to_dense(K, default_value=None, validate_indices=True, name=None)

如有任何能解开这个谜团的窍门,我们将不胜感激。如果要在大小方面更有效的话,我也很乐意考虑批处理我的计算。

< P>你需要从你的SISPY中创建一个TraceFrace稀疏矩阵。由于您的矩阵似乎是CSR格式,您可以按如下方式执行:

将numpy导入为np
导入scipy.sparse
导入tensorflow作为tf
def稀疏_csr_至_tf(csr_mat):
indptr=tf.常数(csr_mat.indptr,dtype=tf.int64)
每行元素=indptr[1:]-indptr[:-1]
i=tf.repeat(tf.range(csr\u mat.shape[0],dtype=tf.int64),每行元素)
j=tf.常数(csr_mat.index,dtype=tf.int64)
索引=np.堆栈([i,j],轴=-1)
数据=tf常数(csr材料数据)
返回tf.sparse.SparseTensor(索引、数据、csr_mat.shape)
#试验
m=scipy.sparse.csr_矩阵([
[0, 0, 1, 0],
[0, 0, 0, 0],
[2, 0, 3, 4],
],dtype=np.float32)
tf_mat=稀疏的csr_到tf(m)
tf.print(tf.sparse.to_density(tf_mat))
# [[0 0 1 0]
#  [0 0 0 0]
#  [2 0 3 4]]

您需要从SciPy矩阵中生成一个TensorFlow稀疏矩阵。由于您的矩阵似乎是CSR格式,您可以按如下方式执行:

将numpy导入为np
导入scipy.sparse
导入tensorflow作为tf
def稀疏_csr_至_tf(csr_mat):
indptr=tf.常数(csr_mat.indptr,dtype=tf.int64)
每行元素=indptr[1:]-indptr[:-1]
i=tf.repeat(tf.range(csr\u mat.shape[0],dtype=tf.int64),每行元素)
j=tf.常数(csr_mat.index,dtype=tf.int64)
索引=np.堆栈([i,j],轴=-1)
数据=tf常数(csr材料数据)
返回tf.sparse.SparseTensor(索引、数据、csr_mat.shape)
#试验
m=scipy.sparse.csr_矩阵([
[0, 0, 1, 0],
[0, 0, 0, 0],
[2, 0, 3, 4],
],dtype=np.float32)
tf_mat=稀疏的csr_到tf(m)
tf.print(tf.sparse.to_density(tf_mat))
# [[0 0 1 0]
#  [0 0 0 0]
#  [2 0 3 4]]

谢谢您的建议!不幸的是,您的解决方案在tf_mat=sparce_csr_to_tf(m)行上抛出了另一条错误消息:“NotImplementedError:无法将符号张量(Repeat/boolean_mask/GatherV2:0)转换为numpy数组”-只是为了澄清一下,我试图从上面的示例中输入矩阵X,对吗?@msa-Well,这只是将CSR稀疏矩阵转换为TensorFlow稀疏矩阵,如果您想稍后返回NumPy,则需要使用
.NumPy()
(在密集张量上,假设您处于渴望模式)。但是,如果问题是生成的矩阵对于您的系统来说太大,我不认为使用TensorFlow会有帮助…谢谢您的建议!不幸的是,您的解决方案在tf_mat=sparce_csr_to_tf(m)行上抛出了另一条错误消息:“NotImplementedError:无法将符号张量(Repeat/boolean_mask/GatherV2:0)转换为numpy数组”-只是为了澄清一下,我试图从上面的示例中输入矩阵X,对吗?@msa-Well,这只是将CSR稀疏矩阵转换为TensorFlow稀疏矩阵,如果您想稍后返回NumPy,则需要使用
.NumPy()
(在密集张量上,假设您处于渴望模式)。然而,如果问题是生成的矩阵对于您的系统来说太大,我不认为使用TensorFlow会有帮助。。。