繁体   English   中英

在pytorch中通过张量切片未分配火炬

[英]torch assign not in place by tensor slicing in pytorch

我正在尝试将我当前的代码(将张量分配到位)转换为外部操作。
意思是目前的代码是

self.X[:, nc:] = D

其中 D 与self.X[:, nc:]形状相同
但我想将其转换为

sliced_index = ~ somehow create an indexed tensor from self.X[:, nc:]
self.X = self.X.scatter(1,sliced_index,mm(S_, Z[:, :n - nc]))

并且不知道如何创建仅表示切片张量中的条目的索引掩码张量

最小的例子:

a = [[0,1,2],[3,4,5]]
D = [[6],[7]]
Not_in_place = [[0,1,6],[3,4,7]]

蒙版散布更容易一些。 掩码本身可以作为就地操作计算,之后您可以使用masked_scatter

mask = torch.zeros(self.X.shape, device=self.X.device, dtype=torch.bool)
mask[:, nc:] = True
self.X = self.X.masked_scatter(mask, D)

依赖广播但应该更有效的更专业的版本将是

mask = torch.zeros([1, self.X.size(1)], device=self.X.device, dtype=torch.bool)
mask[0, nc:] = True
self.X = self.X.masked_scatter(mask, D)

使用Tensor.clone复制张量。

a = torch.tensor([[0,1,2],[3,4,5]])
D = torch.tensor([[6],[7]])

n, n[:,-1:] = a.clone(), D
n
tensor([[0, 1, 6],
        [3, 4, 7]])
a
tensor([[0, 1, 2],
        [3, 4, 5]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM