【发布时间】:2020-10-24 17:22:56
【问题描述】:
我们有一个自定义的torch.autograd.Functionz(x, t),它以一种不适合直接自动微分的方式计算输出y,并计算了运算相对于其输入x和t的雅可比行列式,所以我们可以实现backward方法。
但是,该操作涉及对神经网络进行多次内部调用,我们现在已将其实现为 torch.nn.Linear 对象的堆栈,包装在 net 中,torch.nn.Module。在数学上,这些是由t 参数化的。
有什么方法可以让net 本身成为z 的forward 方法的输入?然后,我们将从我们的 backward 返回上游梯度 Dy 和参数 Jacobia dydt_i 的产品列表,其中每个参数 ti 是 net 的子级(除了 @987654340 @,虽然x是数据,不需要梯度累积)。
或者我们真的需要采用t(实际上是一个单独的t_i的列表),并在z.forward内部重构Linear中所有Linear层的动作net?
【问题讨论】:
标签: python neural-network pytorch automatic-differentiation