我的任务是将一个特殊形成的密集矩阵张量转换为稀疏矩阵张量。例如输入矩阵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循环和ops像slice和concat),我能够做到这一点。但是,M的行号是由小批量大小决定的,可能会改变(比如在测试阶段)。有没有一个很好的方法来实现它?我正在尝试一些control_flow_ops但没有成功。
谢谢!