如何在不使用就地操作的情况下交换 PyTorch 张量中的值(保留梯度)

How to swap values in PyTorch tensor without using in-place operation (conserve gradient)

我有一个名为 state 的张量,形状为 torch.Size([N, 2**n, 2**n]),我想应用以下操作:

state[[0,1]] = state[[1,0]]
state[0] = -1*state[0]

这两个都是就地操作。是否有一些不合适的操作可以替代它们?这些行 在 for 循环 内,因此仅创建新变量会有点困难。

我想通了!

替换:

state[[0,1]] = state[[1,0]] # in-place operation

与:

state = state[[1,0]] # out-of-place operation

对于第二行,我们替换:

state[0] = -1*state[0] # in-place operation

与:

# out-of-place operations
temp = torch.ones(state.shape).type(state.type()).to(state.device)
temp[1] = -1*temp[1]
state = state*temp

这似乎可以解决问题![​​=14=]