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.reshape
加tf.batch_matrix_band_part
,但后者在1.0稳定版中没有,而且也无法解决对角线元素为正的问题。
有没有办法实现将这个batch里每个向量重组成下三角阵?如果不行,有没有别的办法进行批量训练而无需把各个向量用数组组成一个batch?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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不会计算用不到的元素。