tf.sparse

2022-09-03 22:00:34 浏览数 (1)

目录

1、类

1、__init__

2、性质

3、__div__

4、__mul__

5、__truediv__

6、consumers

7、eval

8、from_value

9、get_shape

2、函数


稀疏张量表示。

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个元素的一维张量。

对应的稠密张量满足:

代码语言:javascript复制
dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]

按照惯例,索引应该按行主顺序排序(或者等价于元组索引的字典顺序[i])。当构造稀疏张量对象时,这并不是强制的,但是大多数ops都假定正确的顺序。如果稀疏张量st的序错了,可以通过调用tf.sparse.reorder(st)得到一个固定的版本。例子:稀疏张量

代码语言:javascript复制
SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])

代表密集张量:

代码语言:javascript复制
[[1, 0, 0, 0]
 [0, 0, 2, 0]
 [0, 0, 0, 0]]

1、__init__

代码语言:javascript复制
__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__

代码语言:javascript复制
__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__

代码语言:javascript复制
__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__

代码语言:javascript复制
__truediv__(
    sp_x,
    y
)

'sp_t / dense_t'的内部帮助函数。

6、consumers

代码语言:javascript复制
consumers()

7、eval

代码语言:javascript复制
eval(
    feed_dict=None,
    session=None
)

在一个会话中计算这个稀疏张量。调用这个方法将执行前面的所有操作,这些操作生成生成这个张量的操作所需的输入。注意:在调用SparseTensor.eval()之前,它的图形必须在一个会话中启动,并且要么默认会话必须可用,要么必须显式指定会话。

参数:

  • feed_dict:映射张量对象以提供值的字典。有关有效提要值的描述,请参见tf.Session.run。
  • session:(可选)用来计算这个稀疏张量的过程。如果没有,则使用默认会话。

返回值:

  • 一个SparseTensorValue对象。

8、from_value

代码语言:javascript复制
@classmethod
from_value(
    cls,
    sparse_tensor_value
)

9、get_shape

代码语言:javascript复制
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。

0 人点赞