我有一个Tensorflow网络,可以在调用Session().run()
之后获得图形的值。但是,在将SparseTensorValue
转换为其他类型时遇到一些麻烦。
例如,以下程序创建一个SparseTensorValue
。
>>> import tensorflow as tf
>>> t = tf.Session().run(tf.SparseTensor([[0,1], [0,0], [1,1], [1,0]],[1,2,3,4],[2,2]))
>>> print(t)
SparseTensorValue(indices=array([[0, 1],
[0, 0],
[1, 1],
[1, 0]]), values=array([1, 2, 3, 4], dtype=int32), dense_shape=array([2, 2]))
>>>
我想要的是一种将t
转换为np.array
或np.matrix
,例如np.array([[2., 1.], [4., 3.]])
的方法。
我目前拥有的是以下
>>> import numpy as np
>>> a = np.zeros(t.dense_shape)
>>> for i, v in zip(t.indices, t.values) :
... a[tuple(i)] = v
...
>>> print(a)
[[2. 1.]
[4. 3.]]
>>>
是否有更好的方法来执行转换?特别是,我想消除for循环。
答案 0 :(得分:0)
由于hpaulj的提示,我找到了从Tensorflow网站转换的方法。
tf.Session().run(tf.sparse.to_dense(tf.sparse.reorder(t)))
首先将值重新排序为字典顺序,然后使用to_dense
使其密集,最后将张量馈送到Session().run()
。