如何解决排列后如何进行张量点运算
我有 2 个张量,A 和 B:
A = torch.randn([32,128,64,12],dtype=torch.float64)
B = torch.randn([64,12,dtype=torch.float64)
C = torch.tensordot(A,B,([2,3],[0,1]))
D = C.permute(0,2,1,3) # shape:[32,12]
张量 D 来自操作“tensordot -> permute”。如何在 f() 之后实现新的操作 f() 以进行 tensordot 操作,例如:
A_2 = f(A)
B_2 = f(B)
D = torch.tensordot(A_2,B_2)
解决方法
您是否考虑过使用非常灵活的 torch.einsum
?
firebase login
D = torch.einsum('ijab,abkl->ikjl',A,B)
的问题在于它在 tensordot
的所有维度之前输出 A
的所有维度,而您正在寻找的(在排列时)是从 {{} 中“交错”维度1}} 和 B
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。