TensorFlow稀疏张量:tf.sparse_merge函数

2018-02-28 11:53 更新

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 是不同长度的列表.
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy