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

发布于 2022-09-04 14:51:45 字数 442 浏览 9 评论 0

我有一个向量组成的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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

慈悲佛祖 2022-09-11 14:51:45

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不会计算用不到的元素。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文