TensorFlow函数:tf.sparse_concat
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 列表,则引发此异常.