TensorFlow稀疏张量:tf.sparse_merge函数
tf.sparse_merge 函数
sparse_merge(
sp_ids,
sp_values,
vocab_size,
name=None,
already_sorted=False
)
定义在:tensorflow/python/ops/sparse_ops.py.
请参阅指南:稀疏张量>转变
将一批特征 ID 和值合并为一个 SparseTensor.
当特征 ID 及其对应值存储在磁盘上的 Example 原型中时,就会出现此函数的最常见用例.parse_example将返回一个批次 ID 和批次值,并且这个函数将它们加入到一个逻辑 SparseTensor 中,以便在 sparse_tensor_dense_matmul、sparse_to_dense 等函数中使用.
此函数返回的 SparseTensor 具有以下属性:
- indices:相当于 sp_ids.indices 的最后一个维度的索引,并替换为 sp_ids.values.
- values:只是 sp_values.values.
- 如果 sp_ids.dense_shape = [D0, D1, ..., Dn, K],那么 output.shape = [D0, D1, ..., Dn, vocab_size].
例如,考虑以下特征向量:
vector1 = [-3, 0, 0, 0, 0, 0]
vector2 = [ 0, 1, 0, 4, 1, 0]
vector3 = [ 5, 0, 0, 9, 0, 0]
在下面的 Example 原型中,这些可能会被存储为稀疏的,只需将特征 id (如果将向量作为矩阵处理的列号) 存储在非零元素和相应的值上:
examples = [Example(features={
"ids": Feature(int64_list=Int64List(value=[0])),
"values": Feature(float_list=FloatList(value=[-3]))}),
Example(features={
"ids": Feature(int64_list=Int64List(value=[1, 4, 3])),
"values": Feature(float_list=FloatList(value=[1, 1, 4]))}),
Example(features={
"ids": Feature(int64_list=Int64List(value=[0, 3])),
"values": Feature(float_list=FloatList(value=[5, 9]))})]
对这些示例调用 parse_example 的结果将生成一个包含“ids”和“values”项的字典.将这两个对象与 vocab_size = 6 一起传递给此函数将生成一个SparseTensor,稀疏表示所有三个实例的表达式.也就是说,indices 属性将包含特征矩阵中非零项的坐标(第一维是矩阵中的行号,即批次内的索引,第二维是列号,即特征 ID);values 将包含实际值.shape 将是原始矩阵的形状,即(3,6).对于上面的例子,输出将等于:
SparseTensor(indices=[[0, 0], [1, 1], [1, 3], [1, 4], [2, 0], [2, 3]],
values=[-3, 1, 4, 1, 5, 9],
dense_shape=[3, 6])
该方法通过简单地提供 sp_ids 以及 vocab_size 的列表来推广到更高维度.在这种情况下,产生的 SparseTensor 具有以下属性: - indices:相当于sp_ids[0].indices的最后一个维度使用 sp_ids[0].values 和 sp_ids[1].values 等被丢弃并连接在一起.- values:只是 sp_values.values.如果sp_ids.dense_shape = [D0, D1, ..., Dn, K],则 output.shape = [D0, D1, ..., Dn] + vocab_size.
函数参数:
- sp_ids:具有 int32 或者 int64 类型的 values 属性的单个 SparseTensor,或者此类 SparseTensors 的 Python列表或其列表.
- sp_values:任何类型的 SparseTensor.
- vocab_size:标量 int64 Tensor(或 Python INT)包含最后一个维度的新大小, all(0 <= sp_ids.values < vocab_size).或者对于 i,所有的列表都有,all(0 <= sp_ids[i].values < vocab_size[i]).
- name:返回张量的名称前缀(可选)
- already_sorted:一个布尔值,用于指定 sp_values 中的每个批次的值是否已经排序.如果是则跳过排序,默认为False(可选).
函数返回值:
一个 SparseTensor,它紧凑地表示一批特征 id 和值,对于传递到期望此类 SparseTensor 的函数非常有用.
可能引发的异常:
- TypeError:如果 sp_values 不是SparseTensor;或者如果 sp_ids 既不是 SparseTensor 也不是它的列表;或者如果 vocab_size 不是 Tensor 或Python int,并且 sp_ids 是 SparseTensor;或者如果 vocab_size 不是一个或其中的列表,并且 sp_ids 是列表.这些情况下将引发 TypeError.
- ValueError:如果 sp_ids 和 vocab_size 是不同长度的列表.