当我尝试将密集矩阵与稀疏矩阵相乘时,我遇到了以下代码中的错误。
import tensorflow as tf
import numpy as np
A = tf.sparse_placeholder(tf.float32)
B = tf.sparse_placeholder(tf.float32)
IsFoc = tf.placeholder(tf.float32, [None, 1])
IsFoc_Diag = tf.diag(IsFoc)
IsUnFoc = tf.placeholder(tf.float32, [None, 1])
IsUnFoc_Diag = tf.diag(IsUnFoc)
b = tf.matmul(IsFoc_Diag,IsUnFoc_Diag)
a = tf.matmul(IsFoc_Diag,tf.sparse_tensor_to_dense(A),a_is_sparse=False,b_is_sparse=True)
错误说:
Traceback (most recent call last):
File "a.py", line 14, in <module>
a = tf.matmul(IsFoc_Diag,tf.sparse_tensor_to_dense(A),a_is_sparse=False,b_is_sparse=True)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 1813, in matmul
name=name)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py", line 2245, in _sparse_mat_mul
b_is_sparse=b_is_sparse, name=name)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op
op_def=op_def)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2508, in create_op
set_shapes_for_outputs(ret)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1873, in set_shapes_for_outputs
shapes = shape_func(op)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1823, in call_with_requiring
return call_cpp_shape_fn(op, require_shape_fn=True)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 610, in call_cpp_shape_fn
debug_python_shape_fn, require_shape_fn)
File "/home/mypath.pfc/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 676, in _call_cpp_shape_fn_impl
raise ValueError(err.message)
ValueError: Shape must be rank 2 but is rank 4 for 'MatMul_1' (op: 'SparseMatMul') with input shapes: [?,1,?,1], ?.
我知道有类似的问题讨论类似的错误,但是,我无法得到这种错误的关键原因。
错误只发生在a = tf.matmul(IsFoc_Diag,tf.sparse_tensor_to_dense(A),a_is_sparse=False,b_is_sparse=True)
行。我希望有人能够回答我的问题。
非常感谢!