tensorflow中如何将若干个向量组成的batch重组成下三角矩阵?

我有一个向量组成的batch(记向量长度为n,batch的shape就是(?,n))。现在需要将其中每个向量重新排列成下三角阵,形成的矩阵构成一个新的batch。例如,输入batch是[[1,2,3],[4,5,6]],输出要是[[[1,0],[2,3]],[[4,0],[5,6]]]。另外,还要求对角线上的元素为正(可以用softplus等实现)

我考虑过使用tf.sparse_to_dense,但是它好像不支持broadcasting,也就无法用于batch的情况。我还考虑使用tf.reshapetf.batch_matrix_band_part,但后者在1.0稳定版中没有,而且也无法解决对角线元素为正的问题。

有没有办法实现将这个batch里每个向量重组成下三角阵?如果不行,有没有别的办法进行批量训练而无需把各个向量用数组组成一个batch?

阅读 5.8k
1 个回答

batch_matrix_band_part实际上是可以用的,只不过它改名成了matrix_band_part,而文档过时了,参见这个回答

至于将对角线上变成整数,可以先提取下三角阵lower = matrix_band_part(input, -1, 0),再提取对角线diag = matrix_band_part(input, 0, 0),结果result=lower - diag + softplus(diag)

input向量中浪费的元素不必理会,因为tensorflow不会计算用不到的元素。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进