为了快速调试,我正在尝试打印出刚刚初始化的SparseTensor.
内置的print函数只是说它是一个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.
Run Code Online (Sandbox Code Playgroud)
运行图形(在本例中只是SparseTensor对象)返回一个SparseTensorValue对象,该对象的打印格式与用于初始化SparseTensor的调用相同,这最终是我想要的.
with tf.Session() as sess:
rows = sess.run(rows)
print(rows)
Run Code Online (Sandbox Code Playgroud)
要使用Print功能,我可以在我的情况下转换为密集矩阵.但是Print仅在运行图形时执行:
rows = tf.sparse_tensor_to_dense(rows)
rows = tf.Print(rows, [rows], summarize=100)
with tf.Session() as sess:
sess.run(rows)
Run Code Online (Sandbox Code Playgroud)
注意"汇总" - 默认设置只打印出零,因为它获得了以密集形式表示的稀疏矩阵的前几个条目!
我发现TestCase.evaluate方法给了我一种我想要的漂亮格式,与上面的Way 0相同:
print(str(self.evaluate(rows)))
Run Code Online (Sandbox Code Playgroud)
输出例如:
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]))
Run Code Online (Sandbox Code Playgroud)