Skip to main content
 首页 » 编程设计

python之如何在 TensorFlow 中打印 SparseTensor 内容

2025年05月04日20mengfanrong

为了快速调试,我尝试打印出刚刚初始化的 SparseTensor。

内置的 print 函数只是说它是一个 SparseTensor 对象,而 tf.Print() 给出了一个错误。错误语句确实打印了对象的内容,但不是以显示实际条目的方式(除非它告诉我它是空的,有一些 :0s 我不知道其重要性)。

rows = tf.Print(rows, [rows]) 
 
TypeError: Failed to convert object of type <class 'tensorflow.python.framework.sparse_tensor.SparseTensor'> to Tensor. Contents: SparseTensor(indices=Tensor("SparseTensor/indices:0", shape=(6, 2), dtype=int64), values=Tensor("SparseTensor/values:0", shape=(6,), dtype=float32), dense_shape=Tensor("SparseTensor/dense_shape:0", shape=(2,), dtype=int64)). Consider casting elements to a supported type. 

请您参考如下方法:

方式0:运行SparseTensor并打印结果

运行图形(在本例中只是 SparseTensor 对象)返回一个 SparseTensorValue 对象,它以与用于初始化 SparseTensor 的调用相同的格式打印,这正是我最终想要的。

with tf.Session() as sess: 
  rows = sess.run(rows) 
  print(rows) 

方式一:转为稠密矩阵后使用Print

要使用 Print 函数,我可以将其转换为密集矩阵。但是 Print 仅在您运行图形时执行:

rows = tf.sparse_tensor_to_dense(rows) 
rows = tf.Print(rows, [rows], summarize=100) 
with tf.Session() as sess: 
  sess.run(rows) 

请注意“汇总”——默认设置只是打印出零,因为它正在获取以密集形式表示的稀疏矩阵的前几个条目!

方式二:使用tf.test.TestCase

我发现 TestCase.evaluate 方法为我提供了我想要的那种漂亮的格式,与上面的方式 0 相同:

print(str(self.evaluate(rows))) 

输出例如:

SparseTensorValue(indices=array([[1, 2], 
   [1, 7], 
   [1, 8], 
   [2, 2], 
   [3, 4], 
   [3, 5]]), values=array([1., 1., 1., 1., 1., 1.], dtype=float32), dense_shape=array([4, 9]))