簡體   English   中英

如何計算 output 相對於 pytorch 中每個輸入的梯度

[英]How to compute the gradient of the output with respect to each input in pytorch

我有一個形狀張量 (number_of rays, number_of_points_per_ray, 3),我們稱它為input input通過 model 和一些處理(所有這些都是可微的)傳遞,我們稱這個過程為inference 最后,我們得到output = inference(input) ,其形狀為 (number_of_rays, number_of_points_per_ray, 300),其中 output 中的每條“射線”僅取決於輸入的同一射線。 例如output[i]只依賴於input[i] 這意味着對於輸入的每組 3 個元素,output 有 300 個元素,所以我希望得到一個與 output 形狀相同的漸變

https://discuss.pytorch.org/t/need-help-computing-gradient-of-the-output-with-respect-to-the-input/150950/5 所述,我嘗試了grads=torch.autograd.grad (outputs = output, inputs = input, grad_outputs = None)

但是我得到的 output 的形狀是 (number_of rays, number_of_points_per_ray, 3),與輸入相同,但與 output 不同。

任何線索我可能做錯了什么? 提前致謝

我假設輸入中的 3 是您轉發到 model.network 的 state 的大小,而 300 是您的 model.network 生成的 output 的大小。

現在,您想為 (number_of_rays) 中的每個元素調用 model.network 的單獨實例嗎? 如果是,那么獲取數組中每個元素的梯度的一種方法是為分配給數組元素的 model.network 的每個實例分配一個單獨的優化器。

這是我的代碼:

class Environment():
    def __init__(self, N, input_dims, output_dims, lr, gamma):
        self.number_of_rays = N
        self.input_dims = input_dims
        self.output_dims = output_dims
        # assign to each ray a neural network
        self.rays = [YourModel(input_dims, output_dims, gamma) for i in range(N)]
        self.optimizer = []
        for i in range(N):
            optim = T.optim.Adam(self.rays[i].parameters(), lr=lr, betas=(0.92, 0.999))
            self.optimizer.append(optim)

    def run(self):
        # here you do your stuff 
        # ...

        # now update the networks
        for i in range(self.number_of_rays):
            prediction = self.rays[i](observation) # feed your input state to the model
            loss = loss_fn(prediction) # compute loss
            self.optimizer[i].zero_grad() # reset the gradients of model parameters
            loss.backward() # backpropagate the prediction loss
            self.optimizer[i].step() # adjust the parameters by the gradients collected in the backward pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM