阅读(1784) (13)

TensorFlow函数:tf.sparse_concat

2018-02-26 14:10:56 更新

tf.sparse_concat 函数

sparse_concat(
    axis,
    sp_inputs,
    name=None,
    expand_nonconcat_dim=False,
    concat_dim=None
)

定义在:tensorflow/python/ops/sparse_ops.py.

参见指南:稀疏张量>操纵

沿着指定维度连接一个 SparseTensor 的列表.

串联是关于每个稀疏输入的稠密版本的.假定每个输入是 SparseTensor,其中,元素沿着增加的维数排序.

如果 expand_nonconcat_dim 为 False,则所有输入的形状必须匹配,但 concat 维度除外.如果 expand_nonconcat_dim 为 True,则允许输入的形状在所有输入中变化.

indices,values 和 shapes 列表必须具有相同的长度.

如果 expand_nonconcat_dim 为 False,则输出形状与输入相同,除了 concat 维度外,它是输入大小沿该维度的总和.

如果 expand_nonconcat_dim 为 True,则沿非 concat 维度的输出形状将扩展为所有输入中最大的输出形状,并且它是连续维度上输入大小的总和.

输出元素将采用沿维数增加的方式保留排序顺序.

这个操作在 O(M log M) 及时运行,其中 M 是所有输入中非空值的总数.这是因为需要进行内部排序才能在任意维度上高效地进行连接.

例如,如果 axis = 1 并且输入如下:

sp_inputs[0]: shape = [2, 3]
[0, 2]: "a"
[1, 0]: "b"
[1, 1]: "c"

sp_inputs[1]: shape = [2, 4]
[0, 1]: "d"
[0, 2]: "e"

那么输出将是:

shape = [2, 7]
[0, 2]: "a"
[0, 4]: "d"
[0, 5]: "e"
[1, 0]: "b"
[1, 1]: "c"

从图形上来说,这相当于:

[    a] concat [  d e  ] = [    a   d e  ]
[b c  ]        [       ]   [b c          ]

另一个例子,如果 axis = 1 并且输入如下:

sp_inputs[0]: shape = [3, 3]
[0, 2]: "a"
[1, 0]: "b"
[2, 1]: "c"

sp_inputs[1]: shape = [2, 4]
[0, 1]: "d"
[0, 2]: "e"

如果 expand_nonconcat_dim = False,则会导致错误.但是,如果 expand_nonconcat_dim = True,则会导致如下情况:

shape = [3, 7]
[0, 2]: "a"
[0, 4]: "d"
[0, 5]: "e"
[1, 0]: "b"
[2, 1]: "c"

从图形上来说,这相当于做:

[    a] concat [  d e  ] = [    a   d e  ]
[b    ]        [       ]   [b            ]
[  c  ]                    [  c          ]

函数参数:

  • axis:连接沿着的维度.必须在范围 [-rank,rank)中,其中rank是每个输入 SparseTensor 中的维数.
  • sp_inputs:SparseTensor要连接的列表.
  • name:返回张量的名称前缀(可选).
  • expand_nonconcat_dim:是否允许扩展非连续的维度.默认为False.
  • concat_dim:轴的旧(已弃用)名称.

返回值:

tf.sparse_concat函数返回具有连接输出的 SparseTensor.

可能引发的异常:

  • TypeError:如果 sp_inputs 不是一个 SparseTensor 列表,则引发此异常.