目录
稀疏张量表示。
1、类
class SparseTensor
:表示一个稀疏张量。
张量流将稀疏张量表示为三个独立的稠密张量:指标、值和dense_shape。在Python中,为了便于使用,这三个张量被收集到一个SparseTensor类中。如果有单独的指标、值和dense_shape张量,在传递到下面的ops之前,将它们包装在sparse张量对象中。具体来说,稀疏张量稀疏张量(指标、值、dense_shape)由以下分量组成,其中N和ndims分别是稀疏张量中的值和维数:
-
indices
:一个dense_shape [N, ndims]的二维int64张量,它指定了稀疏张量中包含非零值的元素的索引(元素是零索引的)。例如,indexes =[[1,3],[2,4]]指定索引为[1,3]和[2,4]的元素具有非零值。 -
indices
:任何类型的一维张量和dense_shape [N],它为索引中的每个元素提供值。例如,给定指标=[[1,3],[2,4]],参数值=[18,3.6]指定稀疏张量的元素[1,3]取值为18,张量的元素[2,4]取值为3.6。 - dense_shape: dense_shape [ndims]的一维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]
按照惯例,索引应该按行主顺序排序(或者等价于元组索引的字典顺序[i])。当构造稀疏张量对象时,这并不是强制的,但是大多数ops都假定正确的顺序。如果稀疏张量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]]
1、__init__
__init__(
indices,
values,
dense_shape
)
创建一个SparseTensor。
参数:
-
indices
:一个二维int64张量的形状[N, ndims]。 -
values
:任意类型和形状的一维张量[N]。 - dense_shape:形状的一维int64张量[ndims]。
2、性质
dense_shape
- 一个int64的一维张量,表示稠密张量的形状。
dtype
- 这个张量中元素的d型。
graph
- 包含索引、值和dense_shape张量的图。
indices
- 表示的稠密张量中非零值的指标。
返回值:
- 一个int64的二维张量,具有dense_shape [N, ndims],其中N是张量中非零值的个数,ndims是秩。
op
- 将值作为输出产生的操作。
shape
- 得到表示稠密张量形状的张量形状。
返回值:
- 一个TensorShape对象。
value
- 表示的稠密张量中的非零值。
返回值:
- 任意数据类型的一维张量。
3、__div__
__div__(
sp_x,
y
)
分量方向上把稀疏张量除以稠密张量。限制:此Op只向稀疏端广播稠密端,而不向相反方向广播。
参数:
- sp_indices: int64型张量。二维。N x R矩阵,在稀疏张量中有非空值的指标,可能不是正则有序的。
- sp_values:张量。必须是以下类型之一:float32、float64、int32、uint8、int16、int8、complex64、int64、qint8、quint8、qint32、bfloat16、uint16、complex128、half、uint32、uint64。一维。N个与sp_indices对应的非空值。
- sp_shape: int64类型的张量。一维。输入稀疏量的形状。
-
dense
:张量。必须具有与sp_values相同的类型。r d。稠密张量操作数。 - name:操作的名称(可选)。
返回值:
- 一个张量。具有与sp_values相同的类型。
4、__mul__
__mul__(
sp_x,
y
)
分量方向上,稀疏张量乘以稠密张量。稀疏张量中隐式零元素对应的输出位置为零(即,不会占用存储空间),而不管稠密张量的内容(即使它是+/-INF并且INF*0 == NaN)。限制:此Op只向稀疏端广播稠密端,而不向相反方向广播。
参数:
- sp_indices: int64型张量。二维。N x R矩阵,在稀疏张量中有非空值的指标,可能不是正则有序的。
- sp_values:张量。必须是以下类型之一:float32、float64、int32、uint8、int16、int8、complex64、int64、qint8、quint8、qint32、bfloat16、uint16、complex128、half、uint32、uint64。一维。N个与sp_indices对应的非空值。
- sp_shape: int64类型的张量。一维。输入稀疏量的形状。
-
dense
:张量。必须具有与sp_values相同的类型。r d。稠密张量操作数。 - name:操作的名称(可选)。
返回值:
- 一个张量。具有与sp_values相同的类型。
5、__truediv__
__truediv__(
sp_x,
y
)
'sp_t / dense_t'的内部帮助函数。
6、consumers
consumers()
7、eval
eval(
feed_dict=None,
session=None
)
在一个会话中计算这个稀疏张量。调用这个方法将执行前面的所有操作,这些操作生成生成这个张量的操作所需的输入。注意:在调用SparseTensor.eval()之前,它的图形必须在一个会话中启动,并且要么默认会话必须可用,要么必须显式指定会话。
参数:
- feed_dict:映射张量对象以提供值的字典。有关有效提要值的描述,请参见tf.Session.run。
-
session
:(可选)用来计算这个稀疏张量的过程。如果没有,则使用默认会话。
返回值:
- 一个SparseTensorValue对象。
8、from_value
@classmethod
from_value(
cls,
sparse_tensor_value
)
9、get_shape
get_shape()
得到表示稠密张量形状的张量形状。
返回值:
- 一个TensorShape对象。
2、函数
add(...)
: 加上两个张量,至少其中一个是稀疏张量。
concat(...)
: 沿指定维连接稀疏张量列表。(弃用参数)
cross(...)
: 从稀疏和稠密张量列表生成稀疏交叉。
cross_hashed(...)
: 从稀疏和稠密张量列表生成散列稀疏交叉。
expand_dims(...)
: 将维数1插入张量的形状中。
eye(...)
: 创建一个沿着对角线的二维稀疏张量。
fill_empty_rows(...)
: 用默认值填充输入二维稀疏张量中的空行。
from_dense(...)
: 将稠密张量转化为稀疏张量。
mask(...)
: 掩码indexedslice的元素。
maximum(...)
: 返回两个稀疏量中元素的最大值。
minimum(...)
: 返回两个稀疏量的元素明智的最小值。
reduce_max(...)
: 计算稀疏张量维上元素的最大值。
reduce_sum(...)
: 计算稀疏张量各维元素的和。
reorder(...)
: 将稀疏张量重新排序为正则的行主顺序。
reset_shape(...)
: 重置指标和值不变的稀疏张量的形状。
reshape(...)
: 重新构造稀疏张量,以新的密集形状表示值。
retain(...)
: 在稀疏张量中保留指定的非空值。
segment_mean(...)
: 沿着张量的稀疏段计算平均值。
segment_sqrt_n(...)
: 计算张量沿稀疏段的和除以根号N。
segment_sum(...)
: 沿着张量的稀疏段计算和。
slice(...)
: 根据起始点和大小切片一个稀疏张量。
softmax(...)
: 将softmax应用于一个批处理的N-D稀疏张量。
sparse_dense_matmul(...)
: 乘以稀疏张量(秩2)A由稠密矩阵B表示。
split(...)
: 沿着轴将稀疏张量分解为num_split张量。
to_dense(...)
: 将稀疏张量转换为稠密张量。
to_indicator(...)
: 将ids的稀疏张量转换为稠密的bool指示张量。
transpose(...)
: 转置一个SparseTensor。