TensorFlow稀疏张量函数:tf.SparseTensor
tf.SparseTensor 函数
SparseTensor 类
定义在:tensorflow/python/framework/sparse_tensor.py.
参见指南:稀疏张量>稀疏张量表示
代表稀疏张量.
TensorFlow表示一个稀疏张量,作为三个独立的稠密张量:indices,values和dense_shape.在Python中,三个张量被集合到一个SparseTensor类中,以方便使用.如果你有单独的indices,values和dense_shape张量,SparseTensor在传递给下面的操作之前,将它们包装在一个对象中.
具体来说,该稀疏张量SparseTensor(indices, values, dense_shape)包括以下组件,其中N和ndims分别是在SparseTensor中的值的数目和维度的数量:
- indices:density_shape[N, ndims]的2-D int64张量,指定稀疏张量中包含非零值(元素为零索引)的元素的索引.例如,indices=[[1,3], [2,4]]指定索引为[1,3]和[2,4]的元素具有非零值.
- values:任何类型和dense_shape [N]的一维张量,它提供了indices中的每个元素的值.例如,给定indices=[[1,3], [2,4]]的参数values=[18, 3.6]指定稀疏张量的元素[1,3]的值为18,张量的元素[2,4]的值为3.6.
- dense_shape:density_shape[ndims]的一个1-D int64张量,指定稀疏张量的dense_shape.获取一个列表,指出每个维度中元素的数量.例如,dense_shape=[3,6]指定二维3x6张量,dense_shape=[2,3,4]指定三维2x3x4张量,并且dense_shape=[9]指定具有9个元素的一维张量.
相应的稠密张量满足:
dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]
按照惯例,indices应该按行优先顺序排列(或者在元组上等效地按字典排序indices[i]).当构造SparseTensor对象时,这不是强制执行的,但大多数操作都假定正确的顺序.如果稀疏张量st的排序是错误的,可以通过调用tf.sparse_reorder(st)来获得一个固定的版本.
例如:稀疏张量表示:
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]]
属性
- dense_shape
int64的一维张量,表示稠密张量的形状. - dtype
在这个张量中元素的DType. - graph
包含 index,value和dense_shape张量的Graph. - indices
表示稠密张量中非零值的指标.
返回:
带有dense_shape[N, ndims]的类型为int64的二维张量,其中N是张量中的非零值的数量,并且ndims是秩. - op
产生values作为输出的Operation. - values
表示稠密张量中的非零值.
返回: - 任何数据类型的一维张量.
方法
__init__方法
__init__(
indices,
values,
dense_shape
)
创建一个SparseTensor.
__init__ 方法参数:
- indices:一个形状为[N, ndims]的二维int64张量.
- values:任何类型和形状[N]的一维张量.
- dense_shape:形状为[ndims]的1-D int64张量.
__init__ 方法返回:
该方法返回一个SparseTensor.
__div__方法
__div__(
sp_x,
y
)
Component-wise 用稠密张量除以 SparseTensor.
限制:这个操作只向稀疏的一面播放密集的一面,而不是其他的方向.
方法参数:
- sp_indices:int64 类型的张量,是2维的;N x R矩阵具有SparseTensor中的非空值索引,可能不符合规范排序.
- sp_values:一个张量;必须是下列类型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half;是一维的.N的非空值对应sp_indices.
- sp_shape:int64 类型的张量,是一维的;输入SparseTensor的形状.
- dense:一个张量,必须与sp_values具有相同的类型;R-D;密集的张量操作数.
- name:操作的名称(可选).
方法返回:
该方法返回一个与sp_values有相同的类型的张量,它是1维的;运行的N值.
__mul__方法
__mul__(
sp_x,
y
)
按Component-wise方式将SparseTensor乘以一个稠密的张量.
与稀疏张量中的隐含零元素相对应的输出位置将是零(即不会占用存储空间),而与密集张量的内容无关(即使它是+/- INF,且INF * 0 == NAN).
限制:这个操作只向稀疏的一面播放密集的一面,而不是其他的方向.
方法参数:
- sp_indices:int64类型的张量,是2维的,N x R矩阵具有SparseTensor中的非空值索引,可能不符合规范排序.
- sp_values:一个张量;必须是下列类型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half;是一维的;N的非空值对应sp_indices.
- sp_shape:int64类型的张量,是1维的;输入SparseTensor的形状.
- dense:一个张量;必须与sp_values具有相同的类型;R-D;密集的张量操作数.
- name:操作的名称(可选).
方法返回:
该方法返回一个与sp_values有相同的类型;这个张量是一维的;运行的N值.
__truediv__方法
__truediv__(
sp_x,
y
)
内部帮助函数'sp_t / dense_t'.
eval 方法
eval(
feed_dict=None,
session=None
)
在一个Session中计算这个稀疏张量.
调用此方法将执行所有前面的操作,这些操作会生成产生此张量的操作所需的输入.
注意:在调用SparseTensor.eval()之前,它的关系图必须已经在Session中启动,并且默认Session必须是可用的,否则session必须明确指定.
方法参数:
- feed_dict:将Tensor对象映射到Feed值的字典.请参阅tf.Session.run以得到有效的Feed值的说明.
- session:(可选)Session用来计算这个稀疏张量.如果没有,将使用默认Session.
方法返回:
该方法返回一个SparseTensorValue对象.
from_value
@classmethod
from_value(
cls,
sparse_tensor_value
)
get_shape
get_shape()
得到TensorShape,它表示稠密张量的形状.
方法返回:
该方法返回一个TensorShape对象.