1. 程式人生 > >TensorFlow之稀疏張量表示

TensorFlow之稀疏張量表示

構造稀疏張量

SparseTensor(indices, values, dense_shape)
indices是一個維度為(n, ndims)的2-D int64張量,指定非零元素的位置。比如indices=[[1,3], [2,4]]表示[1,3]和[2,4]位置的元素為非零元素。n表示非零元素的個數,ndims表示構造的稀疏張量的維數。
values是一個維度為(N)的1-D張量,對應indices所指位置的元素值。
dense_shape是一個維度為(ndims)的1-D張量,代表稀疏張量的維度。

tf.SparseTensor(indices=[[0, 0], [1, 2]]
, values=[1, 2], dense_shape=[3, 4]) >> [[1, 0, 0, 0] [0, 0, 2, 0] [0, 0, 0, 0]]

轉換

將稀疏張量轉為普通矩陣。

tf.sparse_to_dense(
sparse_indices,
output_shape,
sparse_values,
default_value=0,
validate_indices=True,
name=None
)

sparse_indices是那些非零元素的位置。

  • sparse_indices是實數,該矩陣為一維矩陣,指定一維矩陣的某一個元素位置
  • sparse_indices是向量,該矩陣為一維矩陣,指定一維矩陣的多個元素
  • sparse_indices是二維矩陣,該矩陣為多維矩陣,指定多維矩陣的多個元素。

output_shape是矩陣的維度。
sparse_value是對應sparse_indices所指位置的元素值。
default_value是未指定元素的預設值,一般為0。

import tensorflow as tf  

mysparse_indices = tf.constant(5)
mymatrix = tf.sparse_to_dense(mysparse_indices, [11], 10)
with tf.Session() as
sess: result = sess.run(mymatrix) print(result) //[0 0 0 0 0 10 0 0 0 0 0]

SparseTensor和SparseTensorValue

兩者的引數相同。
在計算圖中定義稀疏張量時,使用SparseTensor;在feed資料時使用SparseTensorValue。