我有一个形状Tensor(射线数,每条射线的点数,3),我们称之为input
。input
经过模型和一些处理(所有这些都是可微的),我们称这个过程为inference
,最后得到output = inference(input)
,它的形状为(number_of_rays,number_of_points_per_ray,300),其中输出中的每个“射线”仅依赖于输入的相同射线,例如output[i]
仅依赖于input[i]
。这意味着对于输入上的每组3个元素,输出具有300个元素,所以我希望得到一个与输出形状相同的渐变
正如在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)
但是我得到的输出具有形状(number_of_rays,number_of_points_per_ray,3),其与输入相同而与输出不同。
你知道我可能做错了什么吗?先谢了
1条答案
按热度按时间2wnc66cl1#
我假设输入3是转发到模型网络的状态大小,300是模型网络产生的输出大小。
现在,您想为(number_of_rays)中的每个元素调用模型网络的单独示例吗?如果是,那么获取数组中每个元素的梯度的一种方法是为分配给数组元素的模型网络的每个示例分配单独的优化器。
下面是我的代码: