出于快速调试的目的,我试图打印出我刚刚初始化的 SparseTensor。
内置的打印函数只是说它是一个 SparseTensor 对象,而 tf.Print() 给出了一个错误。错误语句确实打印了对象的内容,但不是以显示实际条目的方式(除非它告诉我它是空的,否则有一些 :0 我不知道其重要性)。
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)
方式1:转换为密集矩阵后使用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]))
关于python - 如何在 TensorFlow 中打印 SparseTensor 内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49182351/