python - 两个张量的 Pytorch 广播乘积
问题描述
我想将两个张量相乘,这就是我得到的:
A
形状张量(20, 96, 110)
B
形状张量(20, 16, 110)
第一个索引用于批量大小。我想要做的基本上是从B
-(20, 1, 110)
中获取每个张量,例如,我想将每个A
张量相乘(20, n, 110)
。所以产品将在最后:AB
形状为的张量(20, 96 * 16, 110)
。
所以我想A
通过广播来乘以每个张量B
。PyTorch 中是否有一种方法可以做到这一点?
解决方案
使用torch.einsum
后跟torch.reshape
:
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
例子:
import numpy as np
import torch
# A of shape (2, 3, 2):
A = torch.from_numpy(np.array([[[1, 1], [2, 2], [3, 3]],
[[4, 4], [5, 5], [6, 6]]]))
# B of shape (2, 2, 2):
B = torch.from_numpy(np.array([[[1, 1], [10, 10]],
[[2, 2], [20, 20]]]))
# AB of shape (2, 3*2, 2):
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
# tensor([[[ 1, 1], [ 10, 10], [ 2, 2], [ 20, 20], [ 3, 3], [ 30, 30]],
# [[ 8, 8], [ 80, 80], [ 10, 10], [ 100, 100], [ 12, 12], [ 120, 120]]])
推荐阅读
- mysql - 如何在计数查询中使用“AS”?
- windows - 在 Mac 上为 64 位 Windows 编译 Haskell
- spring - 在没有 Spring Boot 的情况下设置内存 H2 数据库
- cassandra - 我们如何使用其快照文件将 cassandra 表导出为 csv 格式
- javascript - 如何设置在浏览器的新标签(_blank)中打开的pdf文件的标题
- python - 如果仅将 eval() 与本地人一起使用,是否存在安全问题?
- azure-cosmosdb - 当 PK 为 id 且 UK 为 id 和版本时,如何在 cosmos db 中维护不同版本的 JSON 文档
- c# - 如何为 ASP NET CORE Identity 2.1 设置自定义路由,扩展类库
- c# - 如何在c#中发送数组的副本
- c# - 我应该忽略指导并避免在命令对象中进行验证吗?