对于多维的稀疏数据,TensorFlow 支持 SparseTensor 表示。
官方文档地址:https://tensorflow.google.cn/api_guides/python/sparse_ops
构造稀疏张量
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]]
转换本文来源gaodai#ma#com搞*!代#%^码$网!
将稀疏张量转为普通矩阵。
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。
补充知识:彻底搞懂tensorflow里的张量(tensor)
1.引言
学习卷积神经网络(CNN)的时候,最重要的就是搞清楚网络各层的神经元输入输出的数据结构(即张量)。如果仅用线性代数所学的矩阵,向量来理解张量,一定会搞得一头雾水。因此很有必要搞清楚张量是什么东西。
首先明确:张量最主要的两个参数: rank(阶,或维数)、shape(形状)
2.什么是张量
下图是张量的直观的示意:张量是标量、向量、矩阵的集合和推广。
3.什么是rank
rank | 数学实例 | Python 例子 |
---|---|---|
0 | 纯数字(只有大小) | s=352 |
1 | 向量(1个基本向量) | v = [1.1, 2.2, 3.3] |
2 | 矩阵(两个基本向量) | m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
3 | 数据立体(3个基本向量) | t = [ [[2], [4], [6]] , [[8], [10], [12]] , [[14], [16], [18]] ] |
n | n个基本向量 | … |
可以发现:可以数括号[ ]的层数来确定张量的维数(阶)