python - 一个带条件的线性张量
问题描述
我有两个张量:
a = torch.nn.Parameter(torch.rand(7, requires_grad=True))
b = torch.randint(0,60, (20,))
是否有一个可以创建一个x
大小为 20 (类似于“b”)的张量(称为它)有条件的一个衬里(或一种快速而简短的方法)?
IE
[b<4 use a[0], 4 <=b<12 use a[1], 12<=b<22 use a[2], <28, <38, <50, >50] for every b
因此,如果:
b = [12, 93, 54, 0...]
我希望我的新张量“x”是:
x = [a[2],a[6], a[6]...]
我将使用这个“x”张量来训练并需要反向传播和可学习的值
IE
loss = torch.rand(20) * x
loss.backward() ...
因此,如果其中一个a
不在 x 中,我希望它不会改变。
解决方案
您可以对条件的乘法掩码求和:
x = a[0]*(b<4) + a[1]*((4<=b)&(b<12)) + a[2]*((12<=b)&(b<22)) + a[3]*((22<=b)&(b<28)) + a[4]*((28<=b)&(b<30)) + a[5]*((30<=b)&(b<50)) + a[6]*(b>=50)
推荐阅读
- vulkan - 使用 vulkan 绘制调用之间的存储缓冲区同步
- linq - 无法使 GroupJoin 工作。NavigationExpandingExpressionVisitor 异常
- docker - 递归复制匹配文件名的文件并保留目录结构
- c# - 在父级更改时调整派生方法的可访问性
- python - 将 1300 个数据帧合并为一个帧变得非常慢
- load-balancing - 防止 Envoy 修改分片键
- xml - 如何使用 sed 或 awk 替换特定的 xml 节点值
- python - 在 docker-compose first build 上配置 postgres 数据库以供“background_tasks”使用
- arduino - 如何在 Arduino + Protues 中控制双 7 段显示器
- azure - 为 Azure 逻辑应用设置每周运行一次的计划