I need a means of connecting model.modules and exported jit graph.
in torch 1.3  I used to be able to do
import torchvision
import torch
from torch.onnx import utils
model = torchvision.models.resnet18()
tensor = torch.randn([1,3,224,224])
trace, out = torch.jit.get_trace_graph(model, tensor)
graph = trace.graph()
graph = utils._optimize_graph(graph, operator_export_type=torch._C._onnx.OperatorExportTypes.ONNX)
for i, node in enumerate(graph.nodes()):
    scopename = ".".join([x.split('[')[-1] for x in
                                  [s for s in node.scopeName().split("]")] if len(x.split('[')) > 1])
    print("node.scopeName() <%s>  named_module:"%scopename, dict(model.named_modules())[scopename])

Which gives me a nice way to be able to inspect the latents with  _hooks at the same time that I know connectivity, hence can see properties like receptive filed and so on.
Since 1.4 scopeName() is empty. Looks like the pointer gets wiped out instead of stored in jit.trace
I just tried in 1.8 and it is still empty, I do realize that code should change to something like
from torch.onnx import TrainingMode
from torch.onnx import utils
graph, dic, out = utils._model_to_graph(model, tensor, training=TrainingMode.TRAINING, _retain_param_name=True)
for i, node in enumerate(graph.nodes()):
   print(node.scopeName())

I know, I can “retain_names” and then i can grab the common prefix of the inputs that is not numeric, which will give me the scopeName of nodes with inputs. Conv yes, but not other nodes like ReLUs…
I also know that instead of _model_to_graph() I could do
trace = torch.jit.trace(model, tensor)
graph = trace.inlined_graph

which keeps the dirtier version  out of which I can get the scopename, anyway, hacks.

Is there a reason scopeName() gets cleared by jit?
Anyone know if there is an alternative to scopeName such that I can connect a graph to the trace of the graph, node by node?
Or do I have to fix the code, probably around <pytorch/torch/csrc/jit/ir/ir.h>
thanks/