我的任务是将特殊形成的密集矩阵张量转换为稀疏矩阵张量。例如,输入矩阵 M 如下(密集的正整数序列后跟 0 作为每一行中的填充)
[[3 5 7 0]
[2 2 0 0]
[1 3 9 0]]
此外,给定每行的非填充长度,例如由张量 L =
[3, 2, 3].
所需的输出将是稀疏张量 S。
SparseTensorValue(indices=array([[0, 0],[0, 1],[0, 2],[1, 0],[1, 1],[2, 0],[2, 1], [2, 2]]), values=array([3, 5, 7, 2, 2, 1, 3, 9], dtype=int32), shape=array([3, 4]))
这在对象由可变大小的描述符描述的模型中很有用(然后在 embedding_lookup_sparse 中使用 S 来连接描述符的嵌入。)
当 M 的行数已知时(通过 python 循环和像 slice 和 concat 这样的操作),我能够做到这一点。但是,此处 M 的行号由小批量大小决定,并且可能会发生变化(例如在测试阶段)。有没有好的方法来实现它?我正在尝试一些 control_flow_ops 但没有成功。
谢谢!!