Deep learning 从PyTorch模块中提取执行DAG 让我们考虑一个简单的前馈深网甚至RESNET。在这两种情况下,您都可以将执行流视为DAG(有向无环图),其中节点是层(如果没有跳过连接,则为链)

Deep learning 从PyTorch模块中提取执行DAG 让我们考虑一个简单的前馈深网甚至RESNET。在这两种情况下,您都可以将执行流视为DAG(有向无环图),其中节点是层(如果没有跳过连接,则为链),deep-learning,pytorch,Deep Learning,Pytorch,出于某种原因,我需要这个用于pyTorch模型的DAG。到目前为止,我一直在使用自定义对象子类nn.Module(它存储我需要的信息),但我希望最终能够在管道的输入中使用任意模型。有没有办法自动提取此DAG?(如果它在所有情况下都不起作用,这并不重要,我主要是寻找总体思路/原则来实现我的目标)。这确实是可能的。考虑下面的一个简单的公式作为一个更复杂的网络的立场评价: import torch a = torch.randn(3, requires_grad=True) b = 3*a + 1 c

出于某种原因,我需要这个用于pyTorch模型的DAG。到目前为止,我一直在使用自定义对象子类nn.Module(它存储我需要的信息),但我希望最终能够在管道的输入中使用任意模型。有没有办法自动提取此DAG?(如果它在所有情况下都不起作用,这并不重要,我主要是寻找总体思路/原则来实现我的目标)。

这确实是可能的。考虑下面的一个简单的公式作为一个更复杂的网络的立场评价:

import torch
a = torch.randn(3, requires_grad=True)
b = 3*a + 1
c = torch.relu(b)
d = c.sum()
然后
d
有一个
.grad\u fn
属性,您可以从该属性递归计算图,如下所示

d.grad_fn
d.grad_fn.next_functions
d.grad_fn.next_functions
d.grad_fn.next_functions[0][0].next_functions
d.grad_fn.next_functions[0][0].next_functions[0][0].next_functions
基本上,
next_functions
为您提供了当前模块/操作的参数列表,该列表的每个条目都是一个包含实际对象的元组,以及一个指示参数位置的整数。这是更详细的记录


如果您不想自己动手,也可以使用tensorboard内置的计算图可视化工具,即SummaryWriter.add_graph()。

谢谢!似乎next_函数是我的正确切入点!