Python tensorflow:ValueError:Shape必须为秩2,但对于';MatMul_1';

Python tensorflow:ValueError:Shape必须为秩2,但对于';MatMul_1';,python,tensorflow,sparse-matrix,Python,Tensorflow,Sparse Matrix,我在下面的代码中遇到了一个错误,当我试图将密集矩阵与稀疏矩阵相乘时 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.placeho

我在下面的代码中遇到了一个错误,当我试图将密集矩阵与稀疏矩阵相乘时

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.py”,第14行,在
a=tf.matmul(IsFoc\u Diag,tf.sparse\u tensor\u to\u densed(a),a\u为\u sparse=False,b\u为\u sparse=True)
matmul中的文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/ops/math_ops.py”,第1813行
名称=名称)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/ops/gen\u math\u ops.py”,第2245行,在
b_is_sparse=b_is_sparse,name=name)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/op_def_library.py”,第767行,在apply_op
op_def=op_def)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第2508行,在create_op中
为输出设置形状(ret)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第1873行,用于输出的集合形状
形状=形状函数(op)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第1823行,与
回传呼叫\u cpp\u shape\u fn(op,require\u shape\u fn=True)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/common_shapes.py”,第610行,在call_cpp_shape_fn中
调试\u python\u形状\u fn,需要\u形状\u fn)
文件“/home/mypath.pfc/anaconda2/lib/python2.7/site packages/tensorflow/python/framework/common_shapes.py”,第676行,在“call_cpp_shape_fn_impl”中
提升值错误(错误消息)
ValueError:形状必须为秩2,但对于输入形状为[?,1,,,1],?的“MatMul_1”(op:“SparseMatMul”)而言,它是秩4?。
我知道有类似的问题讨论类似的错误,但是,我不能得到这种类型错误的关键原因

错误只发生在
a=tf.matmul(IsFoc\u Diag,tf.sparse\u tensor\u to\u densite(a),a\u是\u sparse=False,b\u是\u sparse=True)行上。
。我希望有人能回答我的问题


多谢各位

你能用
tensor.get\u shape().as\u list()
打印形状,然后检查两者都满足乘法属性吗?你能用
tensor.get\u shape().as\u list()
打印形状,然后检查两者都满足乘法属性吗?。