justinchuby / torch-onnx

A standalone version of the next PyTorch ONNX exporter
MIT License
2 stars 1 forks source link

Improve error report to include profiling stats and onnx graph #30

Closed justinchuby closed 3 months ago

justinchuby commented 3 months ago

E.g

PyTorch ONNX Conversion Error Report

✅ Obtain model graph with `torch.export.export`
❌ Translate the graph into ONNX
⚪ Run `onnx.checker` on the ONNX model
⚪ Execute the model with ONNX Runtime
⚪ Validate model output accuracy

Error message:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 490, in _add_nodes
    _handle_call_function_node_with_lowering(
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 372, in _handle_call_function_node_with_lowering
    raise RuntimeError(
RuntimeError: No ONNX function found for <OpOverload(op='aten.grid_sampler_3d', overload='default')>. Failure message: No decompositions registered for the real-valued input

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 174, in _torch_onnx_export_adaptor
    ir_model = torch_onnx.exported_program_to_ir(program)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 626, in exported_program_to_ir
    values = _add_nodes(exported_program, model, lower=lower, registry=registry)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 501, in _add_nodes
    raise RuntimeError(
RuntimeError: Error when translating node %grid_sampler_3d : [num_users=1] = call_function[target=torch.ops.aten.grid_sampler_3d.default](args = (%arg0_1, %arg1_1, 0, 0, True), kwargs = {}). See the stack trace for more information.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 230, in _torch_onnx_export_adapter_with_error_report
    ir_model, program = _torch_onnx_export_adaptor(*args, **kwargs, check=True)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 197, in _torch_onnx_export_adaptor
    raise OnnxConversionError(
torch_onnx._patch.OnnxConversionError: Failed to convert the exported program to an ONNX model. This is step 2/2 of exporting the model to ONNX. Please create an issue in the PyTorch GitHub repository against the *onnx* component and attach the full error stack as well as reproduction scripts. You can run `torch_onnx.analyze()` to produce an error report after obtaining an ExportedProgram with `torch.export.export()`.

Exported program:

ExportedProgram:
    class GraphModule(torch.nn.Module):
        def forward(self, arg0_1: "f32[1, 1, 2, 3, 2]", arg1_1: "f32[1, 3, 2, 4, 3]"):
            # File: /Users/justinc/Documents/GitHub/torch-onnx/tests/pytorch_test.py:13040 in forward, code: return torch.nn.functional.grid_sample(
            grid_sampler_3d: "f32[1, 1, 3, 2, 4]" = torch.ops.aten.grid_sampler_3d.default(arg0_1, arg1_1, 0, 0, True);  arg0_1 = arg1_1 = None
            return (grid_sampler_3d,)

Graph signature: ExportGraphSignature(input_specs=[InputSpec(kind=<InputKind.USER_INPUT: 1>, arg=TensorArgument(name='arg0_1'), target=None, persistent=None), InputSpec(kind=<InputKind.USER_INPUT: 1>, arg=TensorArgument(name='arg1_1'), target=None, persistent=None)], output_specs=[OutputSpec(kind=<OutputKind.USER_OUTPUT: 1>, arg=TensorArgument(name='grid_sampler_3d'), target=None)])
Range constraints: {}

Analysis

PyTorch ONNX Conversion Analysis

Model Information

The model has 0 parameters and 0 buffers (non-trainable parameters). Number of parameters per dtype: defaultdict(<class 'int'>, {}) Number of buffers per dtype: defaultdict(<class 'int'>, {})

Inputs:

Outputs:

The FX graph has 4 nodes in total. Number of FX nodes per op:

Of the call_function nodes, the counts of operators used are:

ONNX Conversion Information

The model contains operators the dispatcher could not find registered ONNX decompositions for. This may be due to missing implementations, decompositions not registered correctly, or a bug in the dispatcher.

Errors grouped by operator:

Profile result


  _     ._   __/__   _ _  _  _ _/_   Recorded: 10:35:23  Samples:  286
 /_//_/// /_\ / //_// / //_'/ //     Duration: 0.600     CPU time: 0.245
/   _/                      v4.6.2

Program: -c

0.600 _torch_onnx_export_adapter_with_error_report  torch_onnx/_patch.py:210
└─ 0.600 _torch_onnx_export_adaptor  torch_onnx/_patch.py:139
   ├─ 0.512 exported_program_to_ir  torch_onnx/_core.py:574
   │  ├─ 0.436 OnnxRegistry.from_torchlib  torch_onnx/_registration.py:114
   │  │  ├─ 0.283 TracedOnnxFunction.function_ir  ../onnxscript/onnxscript/values.py:587
   │  │  │  ├─ 0.193 get_src_and_ast  ../onnxscript/onnxscript/_internal/ast_utils.py:16
   │  │  │  │  ├─ 0.167 getsource  inspect.py:1256
   │  │  │  │  │     [13 frames hidden]  inspect, tokenize, <string>, <built-in>
   │  │  │  │  └─ 0.024 parse  ast.py:33
   │  │  │  │        [2 frames hidden]  ast, <built-in>
   │  │  │  └─ 0.088 Converter.translate_function_signature  ../onnxscript/onnxscript/converter.py:1463
   │  │  │     └─ 0.087 Converter._translate_function_signature_common  ../onnxscript/onnxscript/converter.py:1378
   │  │  │        ├─ 0.075 is_valid_type  ../onnxscript/onnxscript/type_annotation.py:172
   │  │  │        │  └─ 0.075 is_value_type  ../onnxscript/onnxscript/type_annotation.py:131
   │  │  │        │     ├─ 0.061 is_value_type  ../onnxscript/onnxscript/type_annotation.py:131
   │  │  │        │     │  └─ 0.060 <listcomp>  ../onnxscript/onnxscript/type_annotation.py:150
   │  │  │        │     │     └─ 0.060 is_value_type  ../onnxscript/onnxscript/type_annotation.py:131
   │  │  │        │     │        └─ 0.060 _is_tensor_type  ../onnxscript/onnxscript/type_annotation.py:123
   │  │  │        │     │           └─ 0.059 TensorType.__instancecheck__  <frozen abc>:117
   │  │  │        │     │                 [3 frames hidden]  <frozen abc>, <built-in>
   │  │  │        │     └─ 0.010 _remove_annotation  ../onnxscript/onnxscript/type_annotation.py:70
   │  │  │        │        └─ 0.006 get_origin  typing.py:2424
   │  │  │        └─ 0.006 Converter._eval_constant_expr  ../onnxscript/onnxscript/converter.py:451
   │  │  └─ 0.145 OpSignature.from_function  torch_onnx/_schemas.py:398
   │  │     ├─ 0.053 _get_allowed_types_from_type_annotation  torch_onnx/_schemas.py:255
   │  │     │  ├─ 0.037 _get_allowed_types_from_type_annotation  torch_onnx/_schemas.py:255
   │  │     │  │  ├─ 0.018 _get_allowed_types_from_type_annotation  torch_onnx/_schemas.py:255
   │  │     │  │  │  └─ 0.006 [self]  torch_onnx/_schemas.py
   │  │     │  │  └─ 0.014 _is_optional  torch_onnx/_schemas.py:185
   │  │     │  │     └─ 0.011 [self]  torch_onnx/_schemas.py
   │  │     │  └─ 0.015 DataType.__call__  enum.py:686
   │  │     │        [2 frames hidden]  enum
   │  │     ├─ 0.042 signature  inspect.py:3278
   │  │     │     [5 frames hidden]  inspect
   │  │     └─ 0.039 get_type_hints  typing.py:2300
   │  │           [9 frames hidden]  typing, <built-in>
   │  ├─ 0.040 wrapper  torch/export/exported_program.py:80
   │  │     [20 frames hidden]  torch
   │  └─ 0.033 create_onnx_friendly_decomposition_table  torch_onnx/_decomp.py:39
   │     └─ 0.028 _get_registered_ops  torch_onnx/_decomp.py:12
   │        └─ 0.025 OnnxRegistry.is_registered  torch_onnx/_registration.py:232
   │           └─ 0.025 OnnxRegistry.get_decomps  torch_onnx/_registration.py:209
   │              └─ 0.024 [self]  torch_onnx/_registration.py
   └─ 0.088 export  torch/export/__init__.py:73
         [76 frames hidden]  torch, contextlib, ast, traceback
justinchuby commented 3 months ago

PyTorch ONNX Conversion Error Report

✅ Obtain model graph with `torch.export.export`
❌ Translate the graph into ONNX
⚪ Run `onnx.checker` on the ONNX model
⚪ Execute the model with ONNX Runtime
⚪ Validate model output accuracy

Error message:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 490, in _add_nodes
    _handle_call_function_node_with_lowering(
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 372, in _handle_call_function_node_with_lowering
    raise RuntimeError(
RuntimeError: No ONNX function found for <OpOverload(op='aten.addmm', overload='default')>. Failure message: No decompositions registered for the real-valued input

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 174, in _torch_onnx_export_adaptor
    ir_model = torch_onnx.exported_program_to_ir(program)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 626, in exported_program_to_ir
    values = _add_nodes(exported_program, model, lower=lower, registry=registry)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_core.py", line 501, in _add_nodes
    raise RuntimeError(
RuntimeError: Error when translating node %addmm : [num_users=1] = call_function[target=torch.ops.aten.addmm.default](args = (%arg6_1, %view_1, %t), kwargs = {}). See the stack trace for more information.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 230, in _torch_onnx_export_adapter_with_error_report
    ir_model, program = _torch_onnx_export_adaptor(*args, **kwargs, check=True)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 197, in _torch_onnx_export_adaptor
    raise OnnxConversionError(
torch_onnx._patch.OnnxConversionError: Failed to convert the exported program to an ONNX model. This is step 2/2 of exporting the model to ONNX. Please create an issue in the PyTorch GitHub repository against the *onnx* component and attach the full error stack as well as reproduction scripts. You can run `torch_onnx.analyze()` to produce an error report after obtaining an ExportedProgram with `torch.export.export()`.

Exported program:

Analysis

PyTorch ONNX Conversion Analysis

Model Information

The model has 127398144 parameters and 0 buffers (non-trainable parameters). Number of parameters per dtype:

    defaultdict(<class 'int'>, {torch.float32: 127398144})

Number of buffers per dtype:

    defaultdict(<class 'int'>, {})

Inputs:

Outputs:

The FX graph has 5064 nodes in total. Number of FX nodes per op:

Of the call_function nodes, the counts of operators used are:

ONNX Conversion Information

The model contains operators the dispatcher could not find registered ONNX decompositions for. This may be due to missing implementations, decompositions not registered correctly, or a bug in the dispatcher.

Errors grouped by operator:

Profile result


  _     ._   __/__   _ _  _  _ _/_   Recorded: 10:45:15  Samples:  21751
 /_//_/// /_\ / //_// / //_'/ //     Duration: 23.412    CPU time: 27.537
/   _/                      v4.6.2

Program: /Users/justinc/Documents/GitHub/torch-onnx/tests/longformer_export_api.py

23.411 _torch_onnx_export_adapter_with_error_report  torch_onnx/_patch.py:210
└─ 23.411 _torch_onnx_export_adaptor  torch_onnx/_patch.py:139
   ├─ 14.097 export  torch/export/__init__.py:73
   │     [345 frames hidden]  torch, <string>, contextlib, importli...
   └─ 9.314 exported_program_to_ir  torch_onnx/_core.py:574
      ├─ 8.100 wrapper  torch/export/exported_program.py:80
      │     [102 frames hidden]  torch, <string>
      ├─ 0.853 insert_type_promotion_nodes  torch_onnx/_fx_passes.py:6
      │  └─ 0.795 wrapper  torch/onnx/_internal/diagnostics/infra/decorator.py:71
      │        [14 frames hidden]  torch
      └─ 0.322 OnnxRegistry.from_torchlib  torch_onnx/_registration.py:114
justinchuby commented 3 months ago

PyTorch ONNX Conversion Error Report

✅ Obtain model graph with `torch.export.export`
✅ Translate the graph into ONNX
❌ Run `onnx.checker` on the ONNX model
⚪ Execute the model with ONNX Runtime
⚪ Validate model output accuracy

Error message:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 287, in _torch_onnx_export_adapter_with_error_report
    onnx.checker.check_model(f, full_check=True)
  File "/Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/onnx/checker.py", line 163, in check_model
    C.check_model_path(
onnx.onnx_cpp2py_export.shape_inference.InferenceError: [ShapeInferenceError] Inference error(s): (op_type:Conv, node name: node_Conv_26): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_28): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_40): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_42): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_55): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_57): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_69): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_71): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_84): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_86): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_98): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_100): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_111): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_113): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_126): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_128): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_140): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_142): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_155): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_157): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_169): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_171): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_182): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_184): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_197): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_199): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_211): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_213): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_226): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_228): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_240): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_242): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_253): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_255): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_268): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_270): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:Conv, node name: node_Conv_282): [ShapeInferenceError] Attribute dilations has incorrect size
(op_type:Squeeze, node name: node_Squeeze_284): [TypeInferenceError] Input 0 expected to have type but instead is null
(op_type:aten_addmm, node name: node_aten_addmm_294): [ShapeInferenceError] Inferred shape and existing shape differ in dimension 1: (512) vs (1000)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/justinc/Documents/GitHub/torch-onnx/src/torch_onnx/_patch.py", line 296, in _torch_onnx_export_adapter_with_error_report
    raise OnnxCheckerError(
torch_onnx._patch.OnnxCheckerError: Conversion successful but the ONNX model fails ONNX checker. Please create an issue in the PyTorch GitHub repository against the *onnx* component and attach the full error stack as well as reproduction scripts. 

Exported program:

ExportedProgram:
    class GraphModule(torch.nn.Module):
        def forward(self, arg0_1: "f32[64, 3, 7, 7]", arg1_1: "f32[64]", arg2_1: "f32[64]", arg3_1: "f32[64, 64, 3, 3]", arg4_1: "f32[64]", arg5_1: "f32[64]", arg6_1: "f32[64, 64, 3, 3]", arg7_1: "f32[64]", arg8_1: "f32[64]", arg9_1: "f32[64, 64, 3, 3]", arg10_1: "f32[64]", arg11_1: "f32[64]", arg12_1: "f32[64, 64, 3, 3]", arg13_1: "f32[64]", arg14_1: "f32[64]", arg15_1: "f32[128, 64, 3, 3]", arg16_1: "f32[128]", arg17_1: "f32[128]", arg18_1: "f32[128, 128, 3, 3]", arg19_1: "f32[128]", arg20_1: "f32[128]", arg21_1: "f32[128, 64, 1, 1]", arg22_1: "f32[128]", arg23_1: "f32[128]", arg24_1: "f32[128, 128, 3, 3]", arg25_1: "f32[128]", arg26_1: "f32[128]", arg27_1: "f32[128, 128, 3, 3]", arg28_1: "f32[128]", arg29_1: "f32[128]", arg30_1: "f32[256, 128, 3, 3]", arg31_1: "f32[256]", arg32_1: "f32[256]", arg33_1: "f32[256, 256, 3, 3]", arg34_1: "f32[256]", arg35_1: "f32[256]", arg36_1: "f32[256, 128, 1, 1]", arg37_1: "f32[256]", arg38_1: "f32[256]", arg39_1: "f32[256, 256, 3, 3]", arg40_1: "f32[256]", arg41_1: "f32[256]", arg42_1: "f32[256, 256, 3, 3]", arg43_1: "f32[256]", arg44_1: "f32[256]", arg45_1: "f32[512, 256, 3, 3]", arg46_1: "f32[512]", arg47_1: "f32[512]", arg48_1: "f32[512, 512, 3, 3]", arg49_1: "f32[512]", arg50_1: "f32[512]", arg51_1: "f32[512, 256, 1, 1]", arg52_1: "f32[512]", arg53_1: "f32[512]", arg54_1: "f32[512, 512, 3, 3]", arg55_1: "f32[512]", arg56_1: "f32[512]", arg57_1: "f32[512, 512, 3, 3]", arg58_1: "f32[512]", arg59_1: "f32[512]", arg60_1: "f32[1000, 512]", arg61_1: "f32[1000]", arg62_1: "f32[64]", arg63_1: "f32[64]", arg64_1: "i64[]", arg65_1: "f32[64]", arg66_1: "f32[64]", arg67_1: "i64[]", arg68_1: "f32[64]", arg69_1: "f32[64]", arg70_1: "i64[]", arg71_1: "f32[64]", arg72_1: "f32[64]", arg73_1: "i64[]", arg74_1: "f32[64]", arg75_1: "f32[64]", arg76_1: "i64[]", arg77_1: "f32[128]", arg78_1: "f32[128]", arg79_1: "i64[]", arg80_1: "f32[128]", arg81_1: "f32[128]", arg82_1: "i64[]", arg83_1: "f32[128]", arg84_1: "f32[128]", arg85_1: "i64[]", arg86_1: "f32[128]", arg87_1: "f32[128]", arg88_1: "i64[]", arg89_1: "f32[128]", arg90_1: "f32[128]", arg91_1: "i64[]", arg92_1: "f32[256]", arg93_1: "f32[256]", arg94_1: "i64[]", arg95_1: "f32[256]", arg96_1: "f32[256]", arg97_1: "i64[]", arg98_1: "f32[256]", arg99_1: "f32[256]", arg100_1: "i64[]", arg101_1: "f32[256]", arg102_1: "f32[256]", arg103_1: "i64[]", arg104_1: "f32[256]", arg105_1: "f32[256]", arg106_1: "i64[]", arg107_1: "f32[512]", arg108_1: "f32[512]", arg109_1: "i64[]", arg110_1: "f32[512]", arg111_1: "f32[512]", arg112_1: "i64[]", arg113_1: "f32[512]", arg114_1: "f32[512]", arg115_1: "i64[]", arg116_1: "f32[512]", arg117_1: "f32[512]", arg118_1: "i64[]", arg119_1: "f32[512]", arg120_1: "f32[512]", arg121_1: "i64[]", arg122_1: "f32[4, 3, 224, 224]"):
            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:268 in _forward_impl, code: x = self.conv1(x)
            convolution: "f32[4, 64, 112, 112]" = torch.ops.aten.convolution.default(arg122_1, arg0_1, None, [2, 2], [3, 3], [1, 1], False, [0, 0], 1);  arg122_1 = arg0_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:269 in _forward_impl, code: x = self.bn1(x)
            add: "i64[]" = torch.ops.aten.add.Tensor(arg64_1, 1);  arg64_1 = None
            _native_batch_norm_legit_functional = torch.ops.aten._native_batch_norm_legit_functional.default(convolution, arg1_1, arg2_1, arg62_1, arg63_1, True, 0.1, 1e-05);  convolution = arg1_1 = arg2_1 = arg62_1 = arg63_1 = None
            getitem: "f32[4, 64, 112, 112]" = _native_batch_norm_legit_functional[0]
            getitem_3: "f32[64]" = _native_batch_norm_legit_functional[3]
            getitem_4: "f32[64]" = _native_batch_norm_legit_functional[4];  _native_batch_norm_legit_functional = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:270 in _forward_impl, code: x = self.relu(x)
            relu: "f32[4, 64, 112, 112]" = torch.ops.aten.relu.default(getitem);  getitem = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:271 in _forward_impl, code: x = self.maxpool(x)
            max_pool2d_with_indices = torch.ops.aten.max_pool2d_with_indices.default(relu, [3, 3], [2, 2], [1, 1]);  relu = None
            getitem_5: "f32[4, 64, 56, 56]" = max_pool2d_with_indices[0];  max_pool2d_with_indices = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_1: "f32[4, 64, 56, 56]" = torch.ops.aten.convolution.default(getitem_5, arg3_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  arg3_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_1: "i64[]" = torch.ops.aten.add.Tensor(arg67_1, 1);  arg67_1 = None
            _native_batch_norm_legit_functional_1 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_1, arg4_1, arg5_1, arg65_1, arg66_1, True, 0.1, 1e-05);  convolution_1 = arg4_1 = arg5_1 = arg65_1 = arg66_1 = None
            getitem_7: "f32[4, 64, 56, 56]" = _native_batch_norm_legit_functional_1[0]
            getitem_10: "f32[64]" = _native_batch_norm_legit_functional_1[3]
            getitem_11: "f32[64]" = _native_batch_norm_legit_functional_1[4];  _native_batch_norm_legit_functional_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_1: "f32[4, 64, 56, 56]" = torch.ops.aten.relu.default(getitem_7);  getitem_7 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_2: "f32[4, 64, 56, 56]" = torch.ops.aten.convolution.default(relu_1, arg6_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_1 = arg6_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_2: "i64[]" = torch.ops.aten.add.Tensor(arg70_1, 1);  arg70_1 = None
            _native_batch_norm_legit_functional_2 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_2, arg7_1, arg8_1, arg68_1, arg69_1, True, 0.1, 1e-05);  convolution_2 = arg7_1 = arg8_1 = arg68_1 = arg69_1 = None
            getitem_12: "f32[4, 64, 56, 56]" = _native_batch_norm_legit_functional_2[0]
            getitem_15: "f32[64]" = _native_batch_norm_legit_functional_2[3]
            getitem_16: "f32[64]" = _native_batch_norm_legit_functional_2[4];  _native_batch_norm_legit_functional_2 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_3: "f32[4, 64, 56, 56]" = torch.ops.aten.add.Tensor(getitem_12, getitem_5);  getitem_12 = getitem_5 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_2: "f32[4, 64, 56, 56]" = torch.ops.aten.relu.default(add_3);  add_3 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_3: "f32[4, 64, 56, 56]" = torch.ops.aten.convolution.default(relu_2, arg9_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  arg9_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_4: "i64[]" = torch.ops.aten.add.Tensor(arg73_1, 1);  arg73_1 = None
            _native_batch_norm_legit_functional_3 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_3, arg10_1, arg11_1, arg71_1, arg72_1, True, 0.1, 1e-05);  convolution_3 = arg10_1 = arg11_1 = arg71_1 = arg72_1 = None
            getitem_17: "f32[4, 64, 56, 56]" = _native_batch_norm_legit_functional_3[0]
            getitem_20: "f32[64]" = _native_batch_norm_legit_functional_3[3]
            getitem_21: "f32[64]" = _native_batch_norm_legit_functional_3[4];  _native_batch_norm_legit_functional_3 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_3: "f32[4, 64, 56, 56]" = torch.ops.aten.relu.default(getitem_17);  getitem_17 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_4: "f32[4, 64, 56, 56]" = torch.ops.aten.convolution.default(relu_3, arg12_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_3 = arg12_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_5: "i64[]" = torch.ops.aten.add.Tensor(arg76_1, 1);  arg76_1 = None
            _native_batch_norm_legit_functional_4 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_4, arg13_1, arg14_1, arg74_1, arg75_1, True, 0.1, 1e-05);  convolution_4 = arg13_1 = arg14_1 = arg74_1 = arg75_1 = None
            getitem_22: "f32[4, 64, 56, 56]" = _native_batch_norm_legit_functional_4[0]
            getitem_25: "f32[64]" = _native_batch_norm_legit_functional_4[3]
            getitem_26: "f32[64]" = _native_batch_norm_legit_functional_4[4];  _native_batch_norm_legit_functional_4 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_6: "f32[4, 64, 56, 56]" = torch.ops.aten.add.Tensor(getitem_22, relu_2);  getitem_22 = relu_2 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_4: "f32[4, 64, 56, 56]" = torch.ops.aten.relu.default(add_6);  add_6 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_5: "f32[4, 128, 28, 28]" = torch.ops.aten.convolution.default(relu_4, arg15_1, None, [2, 2], [1, 1], [1, 1], False, [0, 0], 1);  arg15_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_7: "i64[]" = torch.ops.aten.add.Tensor(arg79_1, 1);  arg79_1 = None
            _native_batch_norm_legit_functional_5 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_5, arg16_1, arg17_1, arg77_1, arg78_1, True, 0.1, 1e-05);  convolution_5 = arg16_1 = arg17_1 = arg77_1 = arg78_1 = None
            getitem_27: "f32[4, 128, 28, 28]" = _native_batch_norm_legit_functional_5[0]
            getitem_30: "f32[128]" = _native_batch_norm_legit_functional_5[3]
            getitem_31: "f32[128]" = _native_batch_norm_legit_functional_5[4];  _native_batch_norm_legit_functional_5 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_5: "f32[4, 128, 28, 28]" = torch.ops.aten.relu.default(getitem_27);  getitem_27 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_6: "f32[4, 128, 28, 28]" = torch.ops.aten.convolution.default(relu_5, arg18_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_5 = arg18_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_8: "i64[]" = torch.ops.aten.add.Tensor(arg82_1, 1);  arg82_1 = None
            _native_batch_norm_legit_functional_6 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_6, arg19_1, arg20_1, arg80_1, arg81_1, True, 0.1, 1e-05);  convolution_6 = arg19_1 = arg20_1 = arg80_1 = arg81_1 = None
            getitem_32: "f32[4, 128, 28, 28]" = _native_batch_norm_legit_functional_6[0]
            getitem_35: "f32[128]" = _native_batch_norm_legit_functional_6[3]
            getitem_36: "f32[128]" = _native_batch_norm_legit_functional_6[4];  _native_batch_norm_legit_functional_6 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:100 in forward, code: identity = self.downsample(x)
            convolution_7: "f32[4, 128, 28, 28]" = torch.ops.aten.convolution.default(relu_4, arg21_1, None, [2, 2], [0, 0], [1, 1], False, [0, 0], 1);  relu_4 = arg21_1 = None
            add_9: "i64[]" = torch.ops.aten.add.Tensor(arg85_1, 1);  arg85_1 = None
            _native_batch_norm_legit_functional_7 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_7, arg22_1, arg23_1, arg83_1, arg84_1, True, 0.1, 1e-05);  convolution_7 = arg22_1 = arg23_1 = arg83_1 = arg84_1 = None
            getitem_37: "f32[4, 128, 28, 28]" = _native_batch_norm_legit_functional_7[0]
            getitem_40: "f32[128]" = _native_batch_norm_legit_functional_7[3]
            getitem_41: "f32[128]" = _native_batch_norm_legit_functional_7[4];  _native_batch_norm_legit_functional_7 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_10: "f32[4, 128, 28, 28]" = torch.ops.aten.add.Tensor(getitem_32, getitem_37);  getitem_32 = getitem_37 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_6: "f32[4, 128, 28, 28]" = torch.ops.aten.relu.default(add_10);  add_10 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_8: "f32[4, 128, 28, 28]" = torch.ops.aten.convolution.default(relu_6, arg24_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  arg24_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_11: "i64[]" = torch.ops.aten.add.Tensor(arg88_1, 1);  arg88_1 = None
            _native_batch_norm_legit_functional_8 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_8, arg25_1, arg26_1, arg86_1, arg87_1, True, 0.1, 1e-05);  convolution_8 = arg25_1 = arg26_1 = arg86_1 = arg87_1 = None
            getitem_42: "f32[4, 128, 28, 28]" = _native_batch_norm_legit_functional_8[0]
            getitem_45: "f32[128]" = _native_batch_norm_legit_functional_8[3]
            getitem_46: "f32[128]" = _native_batch_norm_legit_functional_8[4];  _native_batch_norm_legit_functional_8 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_7: "f32[4, 128, 28, 28]" = torch.ops.aten.relu.default(getitem_42);  getitem_42 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_9: "f32[4, 128, 28, 28]" = torch.ops.aten.convolution.default(relu_7, arg27_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_7 = arg27_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_12: "i64[]" = torch.ops.aten.add.Tensor(arg91_1, 1);  arg91_1 = None
            _native_batch_norm_legit_functional_9 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_9, arg28_1, arg29_1, arg89_1, arg90_1, True, 0.1, 1e-05);  convolution_9 = arg28_1 = arg29_1 = arg89_1 = arg90_1 = None
            getitem_47: "f32[4, 128, 28, 28]" = _native_batch_norm_legit_functional_9[0]
            getitem_50: "f32[128]" = _native_batch_norm_legit_functional_9[3]
            getitem_51: "f32[128]" = _native_batch_norm_legit_functional_9[4];  _native_batch_norm_legit_functional_9 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_13: "f32[4, 128, 28, 28]" = torch.ops.aten.add.Tensor(getitem_47, relu_6);  getitem_47 = relu_6 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_8: "f32[4, 128, 28, 28]" = torch.ops.aten.relu.default(add_13);  add_13 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_10: "f32[4, 256, 14, 14]" = torch.ops.aten.convolution.default(relu_8, arg30_1, None, [2, 2], [1, 1], [1, 1], False, [0, 0], 1);  arg30_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_14: "i64[]" = torch.ops.aten.add.Tensor(arg94_1, 1);  arg94_1 = None
            _native_batch_norm_legit_functional_10 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_10, arg31_1, arg32_1, arg92_1, arg93_1, True, 0.1, 1e-05);  convolution_10 = arg31_1 = arg32_1 = arg92_1 = arg93_1 = None
            getitem_52: "f32[4, 256, 14, 14]" = _native_batch_norm_legit_functional_10[0]
            getitem_55: "f32[256]" = _native_batch_norm_legit_functional_10[3]
            getitem_56: "f32[256]" = _native_batch_norm_legit_functional_10[4];  _native_batch_norm_legit_functional_10 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_9: "f32[4, 256, 14, 14]" = torch.ops.aten.relu.default(getitem_52);  getitem_52 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_11: "f32[4, 256, 14, 14]" = torch.ops.aten.convolution.default(relu_9, arg33_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_9 = arg33_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_15: "i64[]" = torch.ops.aten.add.Tensor(arg97_1, 1);  arg97_1 = None
            _native_batch_norm_legit_functional_11 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_11, arg34_1, arg35_1, arg95_1, arg96_1, True, 0.1, 1e-05);  convolution_11 = arg34_1 = arg35_1 = arg95_1 = arg96_1 = None
            getitem_57: "f32[4, 256, 14, 14]" = _native_batch_norm_legit_functional_11[0]
            getitem_60: "f32[256]" = _native_batch_norm_legit_functional_11[3]
            getitem_61: "f32[256]" = _native_batch_norm_legit_functional_11[4];  _native_batch_norm_legit_functional_11 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:100 in forward, code: identity = self.downsample(x)
            convolution_12: "f32[4, 256, 14, 14]" = torch.ops.aten.convolution.default(relu_8, arg36_1, None, [2, 2], [0, 0], [1, 1], False, [0, 0], 1);  relu_8 = arg36_1 = None
            add_16: "i64[]" = torch.ops.aten.add.Tensor(arg100_1, 1);  arg100_1 = None
            _native_batch_norm_legit_functional_12 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_12, arg37_1, arg38_1, arg98_1, arg99_1, True, 0.1, 1e-05);  convolution_12 = arg37_1 = arg38_1 = arg98_1 = arg99_1 = None
            getitem_62: "f32[4, 256, 14, 14]" = _native_batch_norm_legit_functional_12[0]
            getitem_65: "f32[256]" = _native_batch_norm_legit_functional_12[3]
            getitem_66: "f32[256]" = _native_batch_norm_legit_functional_12[4];  _native_batch_norm_legit_functional_12 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_17: "f32[4, 256, 14, 14]" = torch.ops.aten.add.Tensor(getitem_57, getitem_62);  getitem_57 = getitem_62 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_10: "f32[4, 256, 14, 14]" = torch.ops.aten.relu.default(add_17);  add_17 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_13: "f32[4, 256, 14, 14]" = torch.ops.aten.convolution.default(relu_10, arg39_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  arg39_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_18: "i64[]" = torch.ops.aten.add.Tensor(arg103_1, 1);  arg103_1 = None
            _native_batch_norm_legit_functional_13 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_13, arg40_1, arg41_1, arg101_1, arg102_1, True, 0.1, 1e-05);  convolution_13 = arg40_1 = arg41_1 = arg101_1 = arg102_1 = None
            getitem_67: "f32[4, 256, 14, 14]" = _native_batch_norm_legit_functional_13[0]
            getitem_70: "f32[256]" = _native_batch_norm_legit_functional_13[3]
            getitem_71: "f32[256]" = _native_batch_norm_legit_functional_13[4];  _native_batch_norm_legit_functional_13 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_11: "f32[4, 256, 14, 14]" = torch.ops.aten.relu.default(getitem_67);  getitem_67 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_14: "f32[4, 256, 14, 14]" = torch.ops.aten.convolution.default(relu_11, arg42_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_11 = arg42_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_19: "i64[]" = torch.ops.aten.add.Tensor(arg106_1, 1);  arg106_1 = None
            _native_batch_norm_legit_functional_14 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_14, arg43_1, arg44_1, arg104_1, arg105_1, True, 0.1, 1e-05);  convolution_14 = arg43_1 = arg44_1 = arg104_1 = arg105_1 = None
            getitem_72: "f32[4, 256, 14, 14]" = _native_batch_norm_legit_functional_14[0]
            getitem_75: "f32[256]" = _native_batch_norm_legit_functional_14[3]
            getitem_76: "f32[256]" = _native_batch_norm_legit_functional_14[4];  _native_batch_norm_legit_functional_14 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_20: "f32[4, 256, 14, 14]" = torch.ops.aten.add.Tensor(getitem_72, relu_10);  getitem_72 = relu_10 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_12: "f32[4, 256, 14, 14]" = torch.ops.aten.relu.default(add_20);  add_20 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_15: "f32[4, 512, 7, 7]" = torch.ops.aten.convolution.default(relu_12, arg45_1, None, [2, 2], [1, 1], [1, 1], False, [0, 0], 1);  arg45_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_21: "i64[]" = torch.ops.aten.add.Tensor(arg109_1, 1);  arg109_1 = None
            _native_batch_norm_legit_functional_15 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_15, arg46_1, arg47_1, arg107_1, arg108_1, True, 0.1, 1e-05);  convolution_15 = arg46_1 = arg47_1 = arg107_1 = arg108_1 = None
            getitem_77: "f32[4, 512, 7, 7]" = _native_batch_norm_legit_functional_15[0]
            getitem_80: "f32[512]" = _native_batch_norm_legit_functional_15[3]
            getitem_81: "f32[512]" = _native_batch_norm_legit_functional_15[4];  _native_batch_norm_legit_functional_15 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_13: "f32[4, 512, 7, 7]" = torch.ops.aten.relu.default(getitem_77);  getitem_77 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_16: "f32[4, 512, 7, 7]" = torch.ops.aten.convolution.default(relu_13, arg48_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_13 = arg48_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_22: "i64[]" = torch.ops.aten.add.Tensor(arg112_1, 1);  arg112_1 = None
            _native_batch_norm_legit_functional_16 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_16, arg49_1, arg50_1, arg110_1, arg111_1, True, 0.1, 1e-05);  convolution_16 = arg49_1 = arg50_1 = arg110_1 = arg111_1 = None
            getitem_82: "f32[4, 512, 7, 7]" = _native_batch_norm_legit_functional_16[0]
            getitem_85: "f32[512]" = _native_batch_norm_legit_functional_16[3]
            getitem_86: "f32[512]" = _native_batch_norm_legit_functional_16[4];  _native_batch_norm_legit_functional_16 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:100 in forward, code: identity = self.downsample(x)
            convolution_17: "f32[4, 512, 7, 7]" = torch.ops.aten.convolution.default(relu_12, arg51_1, None, [2, 2], [0, 0], [1, 1], False, [0, 0], 1);  relu_12 = arg51_1 = None
            add_23: "i64[]" = torch.ops.aten.add.Tensor(arg115_1, 1);  arg115_1 = None
            _native_batch_norm_legit_functional_17 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_17, arg52_1, arg53_1, arg113_1, arg114_1, True, 0.1, 1e-05);  convolution_17 = arg52_1 = arg53_1 = arg113_1 = arg114_1 = None
            getitem_87: "f32[4, 512, 7, 7]" = _native_batch_norm_legit_functional_17[0]
            getitem_90: "f32[512]" = _native_batch_norm_legit_functional_17[3]
            getitem_91: "f32[512]" = _native_batch_norm_legit_functional_17[4];  _native_batch_norm_legit_functional_17 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_24: "f32[4, 512, 7, 7]" = torch.ops.aten.add.Tensor(getitem_82, getitem_87);  getitem_82 = getitem_87 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_14: "f32[4, 512, 7, 7]" = torch.ops.aten.relu.default(add_24);  add_24 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:92 in forward, code: out = self.conv1(x)
            convolution_18: "f32[4, 512, 7, 7]" = torch.ops.aten.convolution.default(relu_14, arg54_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  arg54_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:93 in forward, code: out = self.bn1(out)
            add_25: "i64[]" = torch.ops.aten.add.Tensor(arg118_1, 1);  arg118_1 = None
            _native_batch_norm_legit_functional_18 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_18, arg55_1, arg56_1, arg116_1, arg117_1, True, 0.1, 1e-05);  convolution_18 = arg55_1 = arg56_1 = arg116_1 = arg117_1 = None
            getitem_92: "f32[4, 512, 7, 7]" = _native_batch_norm_legit_functional_18[0]
            getitem_95: "f32[512]" = _native_batch_norm_legit_functional_18[3]
            getitem_96: "f32[512]" = _native_batch_norm_legit_functional_18[4];  _native_batch_norm_legit_functional_18 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:94 in forward, code: out = self.relu(out)
            relu_15: "f32[4, 512, 7, 7]" = torch.ops.aten.relu.default(getitem_92);  getitem_92 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:96 in forward, code: out = self.conv2(out)
            convolution_19: "f32[4, 512, 7, 7]" = torch.ops.aten.convolution.default(relu_15, arg57_1, None, [1, 1], [1, 1], [1, 1], False, [0, 0], 1);  relu_15 = arg57_1 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:97 in forward, code: out = self.bn2(out)
            add_26: "i64[]" = torch.ops.aten.add.Tensor(arg121_1, 1);  arg121_1 = None
            _native_batch_norm_legit_functional_19 = torch.ops.aten._native_batch_norm_legit_functional.default(convolution_19, arg58_1, arg59_1, arg119_1, arg120_1, True, 0.1, 1e-05);  convolution_19 = arg58_1 = arg59_1 = arg119_1 = arg120_1 = None
            getitem_97: "f32[4, 512, 7, 7]" = _native_batch_norm_legit_functional_19[0]
            getitem_100: "f32[512]" = _native_batch_norm_legit_functional_19[3]
            getitem_101: "f32[512]" = _native_batch_norm_legit_functional_19[4];  _native_batch_norm_legit_functional_19 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:102 in forward, code: out += identity
            add_27: "f32[4, 512, 7, 7]" = torch.ops.aten.add.Tensor(getitem_97, relu_14);  getitem_97 = relu_14 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:103 in forward, code: out = self.relu(out)
            relu_16: "f32[4, 512, 7, 7]" = torch.ops.aten.relu.default(add_27);  add_27 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:278 in _forward_impl, code: x = self.avgpool(x)
            mean: "f32[4, 512, 1, 1]" = torch.ops.aten.mean.dim(relu_16, [-1, -2], True);  relu_16 = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:279 in _forward_impl, code: x = torch.flatten(x, 1)
            view: "f32[4, 512]" = torch.ops.aten.view.default(mean, [4, 512]);  mean = None

            # File: /Users/justinc/Documents/GitHub/torch-onnx/venv/lib/python3.11/site-packages/torchvision/models/resnet.py:280 in _forward_impl, code: x = self.fc(x)
            t: "f32[512, 1000]" = torch.ops.aten.t.default(arg60_1);  arg60_1 = None
            addmm: "f32[4, 1000]" = torch.ops.aten.addmm.default(arg61_1, view, t);  arg61_1 = view = t = None
            return (getitem_3, getitem_4, add, getitem_10, getitem_11, add_1, getitem_15, getitem_16, add_2, getitem_20, getitem_21, add_4, getitem_25, getitem_26, add_5, getitem_30, getitem_31, add_7, getitem_35, getitem_36, add_8, getitem_40, getitem_41, add_9, getitem_45, getitem_46, add_11, getitem_50, getitem_51, add_12, getitem_55, getitem_56, add_14, getitem_60, getitem_61, add_15, getitem_65, getitem_66, add_16, getitem_70, getitem_71, add_18, getitem_75, getitem_76, add_19, getitem_80, getitem_81, add_21, getitem_85, getitem_86, add_22, getitem_90, getitem_91, add_23, getitem_95, getitem_96, add_25, getitem_100, getitem_101, add_26, addmm)

Graph signature: ExportGraphSignature(input_specs=[InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg0_1'), target='conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg1_1'), target='bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg2_1'), target='bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg3_1'), target='layer1.0.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg4_1'), target='layer1.0.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg5_1'), target='layer1.0.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg6_1'), target='layer1.0.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg7_1'), target='layer1.0.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg8_1'), target='layer1.0.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg9_1'), target='layer1.1.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg10_1'), target='layer1.1.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg11_1'), target='layer1.1.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg12_1'), target='layer1.1.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg13_1'), target='layer1.1.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg14_1'), target='layer1.1.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg15_1'), target='layer2.0.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg16_1'), target='layer2.0.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg17_1'), target='layer2.0.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg18_1'), target='layer2.0.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg19_1'), target='layer2.0.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg20_1'), target='layer2.0.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg21_1'), target='layer2.0.downsample.0.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg22_1'), target='layer2.0.downsample.1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg23_1'), target='layer2.0.downsample.1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg24_1'), target='layer2.1.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg25_1'), target='layer2.1.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg26_1'), target='layer2.1.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg27_1'), target='layer2.1.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg28_1'), target='layer2.1.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg29_1'), target='layer2.1.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg30_1'), target='layer3.0.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg31_1'), target='layer3.0.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg32_1'), target='layer3.0.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg33_1'), target='layer3.0.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg34_1'), target='layer3.0.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg35_1'), target='layer3.0.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg36_1'), target='layer3.0.downsample.0.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg37_1'), target='layer3.0.downsample.1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg38_1'), target='layer3.0.downsample.1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg39_1'), target='layer3.1.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg40_1'), target='layer3.1.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg41_1'), target='layer3.1.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg42_1'), target='layer3.1.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg43_1'), target='layer3.1.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg44_1'), target='layer3.1.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg45_1'), target='layer4.0.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg46_1'), target='layer4.0.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg47_1'), target='layer4.0.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg48_1'), target='layer4.0.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg49_1'), target='layer4.0.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg50_1'), target='layer4.0.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg51_1'), target='layer4.0.downsample.0.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg52_1'), target='layer4.0.downsample.1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg53_1'), target='layer4.0.downsample.1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg54_1'), target='layer4.1.conv1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg55_1'), target='layer4.1.bn1.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg56_1'), target='layer4.1.bn1.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg57_1'), target='layer4.1.conv2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg58_1'), target='layer4.1.bn2.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg59_1'), target='layer4.1.bn2.bias', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg60_1'), target='fc.weight', persistent=None), InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg61_1'), target='fc.bias', persistent=None), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg62_1'), target='bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg63_1'), target='bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg64_1'), target='bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg65_1'), target='layer1.0.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg66_1'), target='layer1.0.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg67_1'), target='layer1.0.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg68_1'), target='layer1.0.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg69_1'), target='layer1.0.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg70_1'), target='layer1.0.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg71_1'), target='layer1.1.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg72_1'), target='layer1.1.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg73_1'), target='layer1.1.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg74_1'), target='layer1.1.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg75_1'), target='layer1.1.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg76_1'), target='layer1.1.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg77_1'), target='layer2.0.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg78_1'), target='layer2.0.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg79_1'), target='layer2.0.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg80_1'), target='layer2.0.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg81_1'), target='layer2.0.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg82_1'), target='layer2.0.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg83_1'), target='layer2.0.downsample.1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg84_1'), target='layer2.0.downsample.1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg85_1'), target='layer2.0.downsample.1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg86_1'), target='layer2.1.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg87_1'), target='layer2.1.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg88_1'), target='layer2.1.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg89_1'), target='layer2.1.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg90_1'), target='layer2.1.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg91_1'), target='layer2.1.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg92_1'), target='layer3.0.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg93_1'), target='layer3.0.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg94_1'), target='layer3.0.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg95_1'), target='layer3.0.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg96_1'), target='layer3.0.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg97_1'), target='layer3.0.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg98_1'), target='layer3.0.downsample.1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg99_1'), target='layer3.0.downsample.1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg100_1'), target='layer3.0.downsample.1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg101_1'), target='layer3.1.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg102_1'), target='layer3.1.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg103_1'), target='layer3.1.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg104_1'), target='layer3.1.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg105_1'), target='layer3.1.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg106_1'), target='layer3.1.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg107_1'), target='layer4.0.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg108_1'), target='layer4.0.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg109_1'), target='layer4.0.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg110_1'), target='layer4.0.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg111_1'), target='layer4.0.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg112_1'), target='layer4.0.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg113_1'), target='layer4.0.downsample.1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg114_1'), target='layer4.0.downsample.1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg115_1'), target='layer4.0.downsample.1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg116_1'), target='layer4.1.bn1.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg117_1'), target='layer4.1.bn1.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg118_1'), target='layer4.1.bn1.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg119_1'), target='layer4.1.bn2.running_mean', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg120_1'), target='layer4.1.bn2.running_var', persistent=True), InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg121_1'), target='layer4.1.bn2.num_batches_tracked', persistent=True), InputSpec(kind=<InputKind.USER_INPUT: 1>, arg=TensorArgument(name='arg122_1'), target=None, persistent=None)], output_specs=[OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_3'), target='bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_4'), target='bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add'), target='bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_10'), target='layer1.0.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_11'), target='layer1.0.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_1'), target='layer1.0.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_15'), target='layer1.0.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_16'), target='layer1.0.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_2'), target='layer1.0.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_20'), target='layer1.1.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_21'), target='layer1.1.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_4'), target='layer1.1.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_25'), target='layer1.1.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_26'), target='layer1.1.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_5'), target='layer1.1.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_30'), target='layer2.0.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_31'), target='layer2.0.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_7'), target='layer2.0.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_35'), target='layer2.0.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_36'), target='layer2.0.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_8'), target='layer2.0.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_40'), target='layer2.0.downsample.1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_41'), target='layer2.0.downsample.1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_9'), target='layer2.0.downsample.1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_45'), target='layer2.1.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_46'), target='layer2.1.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_11'), target='layer2.1.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_50'), target='layer2.1.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_51'), target='layer2.1.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_12'), target='layer2.1.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_55'), target='layer3.0.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_56'), target='layer3.0.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_14'), target='layer3.0.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_60'), target='layer3.0.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_61'), target='layer3.0.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_15'), target='layer3.0.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_65'), target='layer3.0.downsample.1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_66'), target='layer3.0.downsample.1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_16'), target='layer3.0.downsample.1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_70'), target='layer3.1.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_71'), target='layer3.1.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_18'), target='layer3.1.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_75'), target='layer3.1.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_76'), target='layer3.1.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_19'), target='layer3.1.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_80'), target='layer4.0.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_81'), target='layer4.0.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_21'), target='layer4.0.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_85'), target='layer4.0.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_86'), target='layer4.0.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_22'), target='layer4.0.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_90'), target='layer4.0.downsample.1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_91'), target='layer4.0.downsample.1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_23'), target='layer4.0.downsample.1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_95'), target='layer4.1.bn1.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_96'), target='layer4.1.bn1.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_25'), target='layer4.1.bn1.num_batches_tracked'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_100'), target='layer4.1.bn2.running_mean'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='getitem_101'), target='layer4.1.bn2.running_var'), OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_26'), target='layer4.1.bn2.num_batches_tracked'), OutputSpec(kind=<OutputKind.USER_OUTPUT: 1>, arg=TensorArgument(name='addmm'), target=None)])
Range constraints: {}

ONNX model:

<
    ir_version=9,
    opset_imports={'': 18, 'pkg.onnxscript.torch_lib': 1},
    producer_name='torch',
    producer_version='2.3.1',
    domain=None,
    model_version=None,
>
graph(
    name=main_graph,
    inputs=(
        %"arg122_1"<FLOAT,[4,3,224,224]>,
        %"conv1.weight"<FLOAT,[64,3,7,7]>,
        %"bn1.weight"<FLOAT,[64]>,
        %"bn1.bias"<FLOAT,[64]>,
        %"layer1.0.conv1.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.0.bn1.weight"<FLOAT,[64]>,
        %"layer1.0.bn1.bias"<FLOAT,[64]>,
        %"layer1.0.conv2.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.0.bn2.weight"<FLOAT,[64]>,
        %"layer1.0.bn2.bias"<FLOAT,[64]>,
        %"layer1.1.conv1.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.1.bn1.weight"<FLOAT,[64]>,
        %"layer1.1.bn1.bias"<FLOAT,[64]>,
        %"layer1.1.conv2.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.1.bn2.weight"<FLOAT,[64]>,
        %"layer1.1.bn2.bias"<FLOAT,[64]>,
        %"layer2.0.conv1.weight"<FLOAT,[128,64,3,3]>,
        %"layer2.0.bn1.weight"<FLOAT,[128]>,
        %"layer2.0.bn1.bias"<FLOAT,[128]>,
        %"layer2.0.conv2.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.0.bn2.weight"<FLOAT,[128]>,
        %"layer2.0.bn2.bias"<FLOAT,[128]>,
        %"layer2.0.downsample.0.weight"<FLOAT,[128,64,1,1]>,
        %"layer2.0.downsample.1.weight"<FLOAT,[128]>,
        %"layer2.0.downsample.1.bias"<FLOAT,[128]>,
        %"layer2.1.conv1.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.1.bn1.weight"<FLOAT,[128]>,
        %"layer2.1.bn1.bias"<FLOAT,[128]>,
        %"layer2.1.conv2.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.1.bn2.weight"<FLOAT,[128]>,
        %"layer2.1.bn2.bias"<FLOAT,[128]>,
        %"layer3.0.conv1.weight"<FLOAT,[256,128,3,3]>,
        %"layer3.0.bn1.weight"<FLOAT,[256]>,
        %"layer3.0.bn1.bias"<FLOAT,[256]>,
        %"layer3.0.conv2.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.0.bn2.weight"<FLOAT,[256]>,
        %"layer3.0.bn2.bias"<FLOAT,[256]>,
        %"layer3.0.downsample.0.weight"<FLOAT,[256,128,1,1]>,
        %"layer3.0.downsample.1.weight"<FLOAT,[256]>,
        %"layer3.0.downsample.1.bias"<FLOAT,[256]>,
        %"layer3.1.conv1.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.1.bn1.weight"<FLOAT,[256]>,
        %"layer3.1.bn1.bias"<FLOAT,[256]>,
        %"layer3.1.conv2.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.1.bn2.weight"<FLOAT,[256]>,
        %"layer3.1.bn2.bias"<FLOAT,[256]>,
        %"layer4.0.conv1.weight"<FLOAT,[512,256,3,3]>,
        %"layer4.0.bn1.weight"<FLOAT,[512]>,
        %"layer4.0.bn1.bias"<FLOAT,[512]>,
        %"layer4.0.conv2.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.0.bn2.weight"<FLOAT,[512]>,
        %"layer4.0.bn2.bias"<FLOAT,[512]>,
        %"layer4.0.downsample.0.weight"<FLOAT,[512,256,1,1]>,
        %"layer4.0.downsample.1.weight"<FLOAT,[512]>,
        %"layer4.0.downsample.1.bias"<FLOAT,[512]>,
        %"layer4.1.conv1.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.1.bn1.weight"<FLOAT,[512]>,
        %"layer4.1.bn1.bias"<FLOAT,[512]>,
        %"layer4.1.conv2.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.1.bn2.weight"<FLOAT,[512]>,
        %"layer4.1.bn2.bias"<FLOAT,[512]>,
        %"fc.weight"<FLOAT,[1000,512]>,
        %"fc.bias"<FLOAT,[1000]>,
        %"bn1.running_mean"<FLOAT,[64]>,
        %"bn1.running_var"<FLOAT,[64]>,
        %"bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.0.bn1.running_mean"<FLOAT,[64]>,
        %"layer1.0.bn1.running_var"<FLOAT,[64]>,
        %"layer1.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.0.bn2.running_mean"<FLOAT,[64]>,
        %"layer1.0.bn2.running_var"<FLOAT,[64]>,
        %"layer1.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer1.1.bn1.running_mean"<FLOAT,[64]>,
        %"layer1.1.bn1.running_var"<FLOAT,[64]>,
        %"layer1.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.1.bn2.running_mean"<FLOAT,[64]>,
        %"layer1.1.bn2.running_var"<FLOAT,[64]>,
        %"layer1.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer2.0.bn1.running_mean"<FLOAT,[128]>,
        %"layer2.0.bn1.running_var"<FLOAT,[128]>,
        %"layer2.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer2.0.bn2.running_mean"<FLOAT,[128]>,
        %"layer2.0.bn2.running_var"<FLOAT,[128]>,
        %"layer2.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer2.0.downsample.1.running_mean"<FLOAT,[128]>,
        %"layer2.0.downsample.1.running_var"<FLOAT,[128]>,
        %"layer2.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer2.1.bn1.running_mean"<FLOAT,[128]>,
        %"layer2.1.bn1.running_var"<FLOAT,[128]>,
        %"layer2.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer2.1.bn2.running_mean"<FLOAT,[128]>,
        %"layer2.1.bn2.running_var"<FLOAT,[128]>,
        %"layer2.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer3.0.bn1.running_mean"<FLOAT,[256]>,
        %"layer3.0.bn1.running_var"<FLOAT,[256]>,
        %"layer3.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer3.0.bn2.running_mean"<FLOAT,[256]>,
        %"layer3.0.bn2.running_var"<FLOAT,[256]>,
        %"layer3.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer3.0.downsample.1.running_mean"<FLOAT,[256]>,
        %"layer3.0.downsample.1.running_var"<FLOAT,[256]>,
        %"layer3.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer3.1.bn1.running_mean"<FLOAT,[256]>,
        %"layer3.1.bn1.running_var"<FLOAT,[256]>,
        %"layer3.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer3.1.bn2.running_mean"<FLOAT,[256]>,
        %"layer3.1.bn2.running_var"<FLOAT,[256]>,
        %"layer3.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer4.0.bn1.running_mean"<FLOAT,[512]>,
        %"layer4.0.bn1.running_var"<FLOAT,[512]>,
        %"layer4.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer4.0.bn2.running_mean"<FLOAT,[512]>,
        %"layer4.0.bn2.running_var"<FLOAT,[512]>,
        %"layer4.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer4.0.downsample.1.running_mean"<FLOAT,[512]>,
        %"layer4.0.downsample.1.running_var"<FLOAT,[512]>,
        %"layer4.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer4.1.bn1.running_mean"<FLOAT,[512]>,
        %"layer4.1.bn1.running_var"<FLOAT,[512]>,
        %"layer4.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer4.1.bn2.running_mean"<FLOAT,[512]>,
        %"layer4.1.bn2.running_var"<FLOAT,[512]>,
        %"layer4.1.bn2.num_batches_tracked"<INT64,[]>
    ),
    outputs=(
        %"val_addmm"<FLOAT,[4,1000]>
    ),
    initializers=(
        %"conv1.weight"<FLOAT,[64,3,7,7]>,
        %"bn1.weight"<FLOAT,[64]>,
        %"bn1.bias"<FLOAT,[64]>,
        %"layer1.0.conv1.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.0.bn1.weight"<FLOAT,[64]>,
        %"layer1.0.bn1.bias"<FLOAT,[64]>,
        %"layer1.0.conv2.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.0.bn2.weight"<FLOAT,[64]>,
        %"layer1.0.bn2.bias"<FLOAT,[64]>,
        %"layer1.1.conv1.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.1.bn1.weight"<FLOAT,[64]>,
        %"layer1.1.bn1.bias"<FLOAT,[64]>,
        %"layer1.1.conv2.weight"<FLOAT,[64,64,3,3]>,
        %"layer1.1.bn2.weight"<FLOAT,[64]>,
        %"layer1.1.bn2.bias"<FLOAT,[64]>,
        %"layer2.0.conv1.weight"<FLOAT,[128,64,3,3]>,
        %"layer2.0.bn1.weight"<FLOAT,[128]>,
        %"layer2.0.bn1.bias"<FLOAT,[128]>,
        %"layer2.0.conv2.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.0.bn2.weight"<FLOAT,[128]>,
        %"layer2.0.bn2.bias"<FLOAT,[128]>,
        %"layer2.0.downsample.0.weight"<FLOAT,[128,64,1,1]>,
        %"layer2.0.downsample.1.weight"<FLOAT,[128]>,
        %"layer2.0.downsample.1.bias"<FLOAT,[128]>,
        %"layer2.1.conv1.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.1.bn1.weight"<FLOAT,[128]>,
        %"layer2.1.bn1.bias"<FLOAT,[128]>,
        %"layer2.1.conv2.weight"<FLOAT,[128,128,3,3]>,
        %"layer2.1.bn2.weight"<FLOAT,[128]>,
        %"layer2.1.bn2.bias"<FLOAT,[128]>,
        %"layer3.0.conv1.weight"<FLOAT,[256,128,3,3]>,
        %"layer3.0.bn1.weight"<FLOAT,[256]>,
        %"layer3.0.bn1.bias"<FLOAT,[256]>,
        %"layer3.0.conv2.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.0.bn2.weight"<FLOAT,[256]>,
        %"layer3.0.bn2.bias"<FLOAT,[256]>,
        %"layer3.0.downsample.0.weight"<FLOAT,[256,128,1,1]>,
        %"layer3.0.downsample.1.weight"<FLOAT,[256]>,
        %"layer3.0.downsample.1.bias"<FLOAT,[256]>,
        %"layer3.1.conv1.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.1.bn1.weight"<FLOAT,[256]>,
        %"layer3.1.bn1.bias"<FLOAT,[256]>,
        %"layer3.1.conv2.weight"<FLOAT,[256,256,3,3]>,
        %"layer3.1.bn2.weight"<FLOAT,[256]>,
        %"layer3.1.bn2.bias"<FLOAT,[256]>,
        %"layer4.0.conv1.weight"<FLOAT,[512,256,3,3]>,
        %"layer4.0.bn1.weight"<FLOAT,[512]>,
        %"layer4.0.bn1.bias"<FLOAT,[512]>,
        %"layer4.0.conv2.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.0.bn2.weight"<FLOAT,[512]>,
        %"layer4.0.bn2.bias"<FLOAT,[512]>,
        %"layer4.0.downsample.0.weight"<FLOAT,[512,256,1,1]>,
        %"layer4.0.downsample.1.weight"<FLOAT,[512]>,
        %"layer4.0.downsample.1.bias"<FLOAT,[512]>,
        %"layer4.1.conv1.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.1.bn1.weight"<FLOAT,[512]>,
        %"layer4.1.bn1.bias"<FLOAT,[512]>,
        %"layer4.1.conv2.weight"<FLOAT,[512,512,3,3]>,
        %"layer4.1.bn2.weight"<FLOAT,[512]>,
        %"layer4.1.bn2.bias"<FLOAT,[512]>,
        %"fc.weight"<FLOAT,[1000,512]>,
        %"fc.bias"<FLOAT,[1000]>,
        %"bn1.running_mean"<FLOAT,[64]>,
        %"bn1.running_var"<FLOAT,[64]>,
        %"bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.0.bn1.running_mean"<FLOAT,[64]>,
        %"layer1.0.bn1.running_var"<FLOAT,[64]>,
        %"layer1.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.0.bn2.running_mean"<FLOAT,[64]>,
        %"layer1.0.bn2.running_var"<FLOAT,[64]>,
        %"layer1.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer1.1.bn1.running_mean"<FLOAT,[64]>,
        %"layer1.1.bn1.running_var"<FLOAT,[64]>,
        %"layer1.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer1.1.bn2.running_mean"<FLOAT,[64]>,
        %"layer1.1.bn2.running_var"<FLOAT,[64]>,
        %"layer1.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer2.0.bn1.running_mean"<FLOAT,[128]>,
        %"layer2.0.bn1.running_var"<FLOAT,[128]>,
        %"layer2.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer2.0.bn2.running_mean"<FLOAT,[128]>,
        %"layer2.0.bn2.running_var"<FLOAT,[128]>,
        %"layer2.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer2.0.downsample.1.running_mean"<FLOAT,[128]>,
        %"layer2.0.downsample.1.running_var"<FLOAT,[128]>,
        %"layer2.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer2.1.bn1.running_mean"<FLOAT,[128]>,
        %"layer2.1.bn1.running_var"<FLOAT,[128]>,
        %"layer2.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer2.1.bn2.running_mean"<FLOAT,[128]>,
        %"layer2.1.bn2.running_var"<FLOAT,[128]>,
        %"layer2.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer3.0.bn1.running_mean"<FLOAT,[256]>,
        %"layer3.0.bn1.running_var"<FLOAT,[256]>,
        %"layer3.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer3.0.bn2.running_mean"<FLOAT,[256]>,
        %"layer3.0.bn2.running_var"<FLOAT,[256]>,
        %"layer3.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer3.0.downsample.1.running_mean"<FLOAT,[256]>,
        %"layer3.0.downsample.1.running_var"<FLOAT,[256]>,
        %"layer3.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer3.1.bn1.running_mean"<FLOAT,[256]>,
        %"layer3.1.bn1.running_var"<FLOAT,[256]>,
        %"layer3.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer3.1.bn2.running_mean"<FLOAT,[256]>,
        %"layer3.1.bn2.running_var"<FLOAT,[256]>,
        %"layer3.1.bn2.num_batches_tracked"<INT64,[]>,
        %"layer4.0.bn1.running_mean"<FLOAT,[512]>,
        %"layer4.0.bn1.running_var"<FLOAT,[512]>,
        %"layer4.0.bn1.num_batches_tracked"<INT64,[]>,
        %"layer4.0.bn2.running_mean"<FLOAT,[512]>,
        %"layer4.0.bn2.running_var"<FLOAT,[512]>,
        %"layer4.0.bn2.num_batches_tracked"<INT64,[]>,
        %"layer4.0.downsample.1.running_mean"<FLOAT,[512]>,
        %"layer4.0.downsample.1.running_var"<FLOAT,[512]>,
        %"layer4.0.downsample.1.num_batches_tracked"<INT64,[]>,
        %"layer4.1.bn1.running_mean"<FLOAT,[512]>,
        %"layer4.1.bn1.running_var"<FLOAT,[512]>,
        %"layer4.1.bn1.num_batches_tracked"<INT64,[]>,
        %"layer4.1.bn2.running_mean"<FLOAT,[512]>,
        %"layer4.1.bn2.running_var"<FLOAT,[512]>,
        %"layer4.1.bn2.num_batches_tracked"<INT64,[]>
    ),
) {
      0 |  # node_Shape_0
           %"val_0"<?,?> ⬅️ ::Shape(%"conv1.weight") {end=1, start=0}
      1 |  # node_Constant_1
           %"val_1"<?,?> ⬅️ ::Constant() {value_ints=[1]}
      2 |  # node_Expand_2
           %"val_2"<?,?> ⬅️ ::Expand(%"val_0", %"val_1")
      3 |  # node_Constant_3
           %"val_3"<?,?> ⬅️ ::Constant() {value=Tensor<FLOAT,[]>(array(0., dtype=float32), name=None)}
      4 |  # node_CastLike_4
           %"val_4"<?,?> ⬅️ ::CastLike(%"val_3", %"arg122_1")
      5 |  # node_Expand_5
           %"val_5"<?,?> ⬅️ ::Expand(%"val_4", %"val_2")
      6 |  # node_Conv_6
           %"val_convolution"<FLOAT,[4,64,112,112]> ⬅️ ::Conv(%"arg122_1", %"conv1.weight", %"val_5") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[3, 3, 3, 3], strides=[2, 2]}
      7 |  # node_Constant_7
           %"val_6"<?,?> ⬅️ ::Constant() {value=Tensor<INT64,[]>(array(1), name=None)}
      8 |  # node_aten_add_8
           %"val_add"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"bn1.num_batches_tracked", %"val_6") {alpha=1.0}
      9 |  # node_Constant_9
           %"val_7"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     10 |  # node__aten_native_batch_norm_training_onnx_10
           %"getitem"<FLOAT,[4,64,112,112]>, %"val__native_batch_norm_legit_functional__1"<FLOAT,[64]>, %"val__native_batch_norm_legit_functional__2"<FLOAT,[64]>, %"getitem_3"<FLOAT,[64]>, %"getitem_4"<FLOAT,[64]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution", %"bn1.weight", %"bn1.bias", %"bn1.running_mean", %"bn1.running_var", %"val_7") {momentum=0.9, eps=1e-05}
     11 |  # node_aten_relu_11
           %"val_relu"<FLOAT,[4,64,112,112]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem")
     12 |  # node_MaxPool_12
           %"getitem_5"<FLOAT,[4,64,56,56]>, %"val_8"<?,?> ⬅️ ::MaxPool(%"val_relu") {auto_pad=NOTSET, ceil_mode=False, dilations=[1, 1], kernel_shape=[3, 3], pads=[1, 1, 1, 1], storage_order=0, strides=[2, 2]}
     13 |  # node_MaxPool_13
           %"val_9"<?,?>, %"val_10"<?,?> ⬅️ ::MaxPool(%"val_relu") {auto_pad=NOTSET, ceil_mode=0, dilations=[1, 1], kernel_shape=[1, 1], storage_order=0, strides=[1, 1]}
     14 |  # node_Constant_14
           %"val_11"<?,?> ⬅️ ::Constant() {value_ints=[1, 1]}
     15 |  # node_Constant_15
           %"val_12"<?,?> ⬅️ ::Constant() {value_ints=[0, 0]}
     16 |  # node_Constant_16
           %"val_13"<?,?> ⬅️ ::Constant() {value_ints=[2, 3]}
     17 |  # node_Slice_17
           %"val_14"<?,?> ⬅️ ::Slice(%"val_10", %"val_12", %"val_11", %"val_13", None)
     18 |  # node_Sub_18
           %"val_max_pool2d_with_indices__1"<INT64,[4,64,56,56]> ⬅️ ::Sub(%"val_8", %"val_14")
     19 |  # node_Shape_19
           %"val_15"<?,?> ⬅️ ::Shape(%"layer1.0.conv1.weight") {end=1, start=0}
     20 |  # node_Constant_20
           %"val_16"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     21 |  # node_Expand_21
           %"val_17"<?,?> ⬅️ ::Expand(%"val_15", %"val_16")
     22 |  # node_CastLike_22
           %"val_18"<?,?> ⬅️ ::CastLike(%"val_3", %"getitem_5")
     23 |  # node_Expand_23
           %"val_19"<?,?> ⬅️ ::Expand(%"val_18", %"val_17")
     24 |  # node_Constant_24
           %"val_20"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     25 |  # node_Unsqueeze_25
           %"val_21"<?,?> ⬅️ ::Unsqueeze(%"getitem_5", %"val_20")
     26 |  # node_Conv_26
           %"val_22"<?,?> ⬅️ ::Conv(%"val_21", %"layer1.0.conv1.weight", %"val_19") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
     27 |  # node_Constant_27
           %"val_23"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     28 |  # node_Squeeze_28
           %"val_convolution_1"<FLOAT,[4,64,56,56]> ⬅️ ::Squeeze(%"val_22", %"val_23")
     29 |  # node_aten_add_29
           %"val_add_1"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer1.0.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
     30 |  # node_Constant_30
           %"val_24"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     31 |  # node__aten_native_batch_norm_training_onnx_31
           %"getitem_7"<FLOAT,[4,64,56,56]>, %"val__native_batch_norm_legit_functional_1__1"<FLOAT,[64]>, %"val__native_batch_norm_legit_functional_1__2"<FLOAT,[64]>, %"getitem_10"<FLOAT,[64]>, %"getitem_11"<FLOAT,[64]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_1", %"layer1.0.bn1.weight", %"layer1.0.bn1.bias", %"layer1.0.bn1.running_mean", %"layer1.0.bn1.running_var", %"val_24") {momentum=0.9, eps=1e-05}
     32 |  # node_aten_relu_32
           %"val_relu_1"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_7")
     33 |  # node_Shape_33
           %"val_25"<?,?> ⬅️ ::Shape(%"layer1.0.conv2.weight") {end=1, start=0}
     34 |  # node_Constant_34
           %"val_26"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     35 |  # node_Expand_35
           %"val_27"<?,?> ⬅️ ::Expand(%"val_25", %"val_26")
     36 |  # node_CastLike_36
           %"val_28"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_1")
     37 |  # node_Expand_37
           %"val_29"<?,?> ⬅️ ::Expand(%"val_28", %"val_27")
     38 |  # node_Constant_38
           %"val_30"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     39 |  # node_Unsqueeze_39
           %"val_31"<?,?> ⬅️ ::Unsqueeze(%"val_relu_1", %"val_30")
     40 |  # node_Conv_40
           %"val_32"<?,?> ⬅️ ::Conv(%"val_31", %"layer1.0.conv2.weight", %"val_29") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
     41 |  # node_Constant_41
           %"val_33"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     42 |  # node_Squeeze_42
           %"val_convolution_2"<FLOAT,[4,64,56,56]> ⬅️ ::Squeeze(%"val_32", %"val_33")
     43 |  # node_aten_add_43
           %"val_add_2"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer1.0.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
     44 |  # node_Constant_44
           %"val_34"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     45 |  # node__aten_native_batch_norm_training_onnx_45
           %"getitem_12"<FLOAT,[4,64,56,56]>, %"val__native_batch_norm_legit_functional_2__1"<FLOAT,[64]>, %"val__native_batch_norm_legit_functional_2__2"<FLOAT,[64]>, %"getitem_15"<FLOAT,[64]>, %"getitem_16"<FLOAT,[64]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_2", %"layer1.0.bn2.weight", %"layer1.0.bn2.bias", %"layer1.0.bn2.running_mean", %"layer1.0.bn2.running_var", %"val_34") {momentum=0.9, eps=1e-05}
     46 |  # node_aten_add_46
           %"val_add_3"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_12", %"getitem_5") {alpha=1.0}
     47 |  # node_aten_relu_47
           %"val_relu_2"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_3")
     48 |  # node_Shape_48
           %"val_35"<?,?> ⬅️ ::Shape(%"layer1.1.conv1.weight") {end=1, start=0}
     49 |  # node_Constant_49
           %"val_36"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     50 |  # node_Expand_50
           %"val_37"<?,?> ⬅️ ::Expand(%"val_35", %"val_36")
     51 |  # node_CastLike_51
           %"val_38"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_2")
     52 |  # node_Expand_52
           %"val_39"<?,?> ⬅️ ::Expand(%"val_38", %"val_37")
     53 |  # node_Constant_53
           %"val_40"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     54 |  # node_Unsqueeze_54
           %"val_41"<?,?> ⬅️ ::Unsqueeze(%"val_relu_2", %"val_40")
     55 |  # node_Conv_55
           %"val_42"<?,?> ⬅️ ::Conv(%"val_41", %"layer1.1.conv1.weight", %"val_39") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
     56 |  # node_Constant_56
           %"val_43"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     57 |  # node_Squeeze_57
           %"val_convolution_3"<FLOAT,[4,64,56,56]> ⬅️ ::Squeeze(%"val_42", %"val_43")
     58 |  # node_aten_add_58
           %"val_add_4"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer1.1.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
     59 |  # node_Constant_59
           %"val_44"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     60 |  # node__aten_native_batch_norm_training_onnx_60
           %"getitem_17"<FLOAT,[4,64,56,56]>, %"val__native_batch_norm_legit_functional_3__1"<FLOAT,[64]>, %"val__native_batch_norm_legit_functional_3__2"<FLOAT,[64]>, %"getitem_20"<FLOAT,[64]>, %"getitem_21"<FLOAT,[64]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_3", %"layer1.1.bn1.weight", %"layer1.1.bn1.bias", %"layer1.1.bn1.running_mean", %"layer1.1.bn1.running_var", %"val_44") {momentum=0.9, eps=1e-05}
     61 |  # node_aten_relu_61
           %"val_relu_3"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_17")
     62 |  # node_Shape_62
           %"val_45"<?,?> ⬅️ ::Shape(%"layer1.1.conv2.weight") {end=1, start=0}
     63 |  # node_Constant_63
           %"val_46"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     64 |  # node_Expand_64
           %"val_47"<?,?> ⬅️ ::Expand(%"val_45", %"val_46")
     65 |  # node_CastLike_65
           %"val_48"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_3")
     66 |  # node_Expand_66
           %"val_49"<?,?> ⬅️ ::Expand(%"val_48", %"val_47")
     67 |  # node_Constant_67
           %"val_50"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     68 |  # node_Unsqueeze_68
           %"val_51"<?,?> ⬅️ ::Unsqueeze(%"val_relu_3", %"val_50")
     69 |  # node_Conv_69
           %"val_52"<?,?> ⬅️ ::Conv(%"val_51", %"layer1.1.conv2.weight", %"val_49") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
     70 |  # node_Constant_70
           %"val_53"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     71 |  # node_Squeeze_71
           %"val_convolution_4"<FLOAT,[4,64,56,56]> ⬅️ ::Squeeze(%"val_52", %"val_53")
     72 |  # node_aten_add_72
           %"val_add_5"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer1.1.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
     73 |  # node_Constant_73
           %"val_54"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     74 |  # node__aten_native_batch_norm_training_onnx_74
           %"getitem_22"<FLOAT,[4,64,56,56]>, %"val__native_batch_norm_legit_functional_4__1"<FLOAT,[64]>, %"val__native_batch_norm_legit_functional_4__2"<FLOAT,[64]>, %"getitem_25"<FLOAT,[64]>, %"getitem_26"<FLOAT,[64]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_4", %"layer1.1.bn2.weight", %"layer1.1.bn2.bias", %"layer1.1.bn2.running_mean", %"layer1.1.bn2.running_var", %"val_54") {momentum=0.9, eps=1e-05}
     75 |  # node_aten_add_75
           %"val_add_6"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_22", %"val_relu_2") {alpha=1.0}
     76 |  # node_aten_relu_76
           %"val_relu_4"<FLOAT,[4,64,56,56]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_6")
     77 |  # node_Shape_77
           %"val_55"<?,?> ⬅️ ::Shape(%"layer2.0.conv1.weight") {end=1, start=0}
     78 |  # node_Constant_78
           %"val_56"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     79 |  # node_Expand_79
           %"val_57"<?,?> ⬅️ ::Expand(%"val_55", %"val_56")
     80 |  # node_CastLike_80
           %"val_58"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_4")
     81 |  # node_Expand_81
           %"val_59"<?,?> ⬅️ ::Expand(%"val_58", %"val_57")
     82 |  # node_Constant_82
           %"val_60"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     83 |  # node_Unsqueeze_83
           %"val_61"<?,?> ⬅️ ::Unsqueeze(%"val_relu_4", %"val_60")
     84 |  # node_Conv_84
           %"val_62"<?,?> ⬅️ ::Conv(%"val_61", %"layer2.0.conv1.weight", %"val_59") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[2, 2]}
     85 |  # node_Constant_85
           %"val_63"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     86 |  # node_Squeeze_86
           %"val_convolution_5"<FLOAT,[4,128,28,28]> ⬅️ ::Squeeze(%"val_62", %"val_63")
     87 |  # node_aten_add_87
           %"val_add_7"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer2.0.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
     88 |  # node_Constant_88
           %"val_64"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
     89 |  # node__aten_native_batch_norm_training_onnx_89
           %"getitem_27"<FLOAT,[4,128,28,28]>, %"val__native_batch_norm_legit_functional_5__1"<FLOAT,[128]>, %"val__native_batch_norm_legit_functional_5__2"<FLOAT,[128]>, %"getitem_30"<FLOAT,[128]>, %"getitem_31"<FLOAT,[128]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_5", %"layer2.0.bn1.weight", %"layer2.0.bn1.bias", %"layer2.0.bn1.running_mean", %"layer2.0.bn1.running_var", %"val_64") {momentum=0.9, eps=1e-05}
     90 |  # node_aten_relu_90
           %"val_relu_5"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_27")
     91 |  # node_Shape_91
           %"val_65"<?,?> ⬅️ ::Shape(%"layer2.0.conv2.weight") {end=1, start=0}
     92 |  # node_Constant_92
           %"val_66"<?,?> ⬅️ ::Constant() {value_ints=[1]}
     93 |  # node_Expand_93
           %"val_67"<?,?> ⬅️ ::Expand(%"val_65", %"val_66")
     94 |  # node_CastLike_94
           %"val_68"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_5")
     95 |  # node_Expand_95
           %"val_69"<?,?> ⬅️ ::Expand(%"val_68", %"val_67")
     96 |  # node_Constant_96
           %"val_70"<?,?> ⬅️ ::Constant() {value_ints=[0]}
     97 |  # node_Unsqueeze_97
           %"val_71"<?,?> ⬅️ ::Unsqueeze(%"val_relu_5", %"val_70")
     98 |  # node_Conv_98
           %"val_72"<?,?> ⬅️ ::Conv(%"val_71", %"layer2.0.conv2.weight", %"val_69") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
     99 |  # node_Constant_99
           %"val_73"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    100 |  # node_Squeeze_100
           %"val_convolution_6"<FLOAT,[4,128,28,28]> ⬅️ ::Squeeze(%"val_72", %"val_73")
    101 |  # node_aten_add_101
           %"val_add_8"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer2.0.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    102 |  # node_Constant_102
           %"val_74"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    103 |  # node__aten_native_batch_norm_training_onnx_103
           %"getitem_32"<FLOAT,[4,128,28,28]>, %"val__native_batch_norm_legit_functional_6__1"<FLOAT,[128]>, %"val__native_batch_norm_legit_functional_6__2"<FLOAT,[128]>, %"getitem_35"<FLOAT,[128]>, %"getitem_36"<FLOAT,[128]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_6", %"layer2.0.bn2.weight", %"layer2.0.bn2.bias", %"layer2.0.bn2.running_mean", %"layer2.0.bn2.running_var", %"val_74") {momentum=0.9, eps=1e-05}
    104 |  # node_Shape_104
           %"val_75"<?,?> ⬅️ ::Shape(%"layer2.0.downsample.0.weight") {end=1, start=0}
    105 |  # node_Constant_105
           %"val_76"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    106 |  # node_Expand_106
           %"val_77"<?,?> ⬅️ ::Expand(%"val_75", %"val_76")
    107 |  # node_CastLike_107
           %"val_78"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_4")
    108 |  # node_Expand_108
           %"val_79"<?,?> ⬅️ ::Expand(%"val_78", %"val_77")
    109 |  # node_Constant_109
           %"val_80"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    110 |  # node_Unsqueeze_110
           %"val_81"<?,?> ⬅️ ::Unsqueeze(%"val_relu_4", %"val_80")
    111 |  # node_Conv_111
           %"val_82"<?,?> ⬅️ ::Conv(%"val_81", %"layer2.0.downsample.0.weight", %"val_79") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[0, 0, 0, 0], strides=[2, 2]}
    112 |  # node_Constant_112
           %"val_83"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    113 |  # node_Squeeze_113
           %"val_convolution_7"<FLOAT,[4,128,28,28]> ⬅️ ::Squeeze(%"val_82", %"val_83")
    114 |  # node_aten_add_114
           %"val_add_9"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer2.0.downsample.1.num_batches_tracked", %"val_6") {alpha=1.0}
    115 |  # node_Constant_115
           %"val_84"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    116 |  # node__aten_native_batch_norm_training_onnx_116
           %"getitem_37"<FLOAT,[4,128,28,28]>, %"val__native_batch_norm_legit_functional_7__1"<FLOAT,[128]>, %"val__native_batch_norm_legit_functional_7__2"<FLOAT,[128]>, %"getitem_40"<FLOAT,[128]>, %"getitem_41"<FLOAT,[128]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_7", %"layer2.0.downsample.1.weight", %"layer2.0.downsample.1.bias", %"layer2.0.downsample.1.running_mean", %"layer2.0.downsample.1.running_var", %"val_84") {momentum=0.9, eps=1e-05}
    117 |  # node_aten_add_117
           %"val_add_10"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_32", %"getitem_37") {alpha=1.0}
    118 |  # node_aten_relu_118
           %"val_relu_6"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_10")
    119 |  # node_Shape_119
           %"val_85"<?,?> ⬅️ ::Shape(%"layer2.1.conv1.weight") {end=1, start=0}
    120 |  # node_Constant_120
           %"val_86"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    121 |  # node_Expand_121
           %"val_87"<?,?> ⬅️ ::Expand(%"val_85", %"val_86")
    122 |  # node_CastLike_122
           %"val_88"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_6")
    123 |  # node_Expand_123
           %"val_89"<?,?> ⬅️ ::Expand(%"val_88", %"val_87")
    124 |  # node_Constant_124
           %"val_90"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    125 |  # node_Unsqueeze_125
           %"val_91"<?,?> ⬅️ ::Unsqueeze(%"val_relu_6", %"val_90")
    126 |  # node_Conv_126
           %"val_92"<?,?> ⬅️ ::Conv(%"val_91", %"layer2.1.conv1.weight", %"val_89") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    127 |  # node_Constant_127
           %"val_93"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    128 |  # node_Squeeze_128
           %"val_convolution_8"<FLOAT,[4,128,28,28]> ⬅️ ::Squeeze(%"val_92", %"val_93")
    129 |  # node_aten_add_129
           %"val_add_11"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer2.1.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
    130 |  # node_Constant_130
           %"val_94"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    131 |  # node__aten_native_batch_norm_training_onnx_131
           %"getitem_42"<FLOAT,[4,128,28,28]>, %"val__native_batch_norm_legit_functional_8__1"<FLOAT,[128]>, %"val__native_batch_norm_legit_functional_8__2"<FLOAT,[128]>, %"getitem_45"<FLOAT,[128]>, %"getitem_46"<FLOAT,[128]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_8", %"layer2.1.bn1.weight", %"layer2.1.bn1.bias", %"layer2.1.bn1.running_mean", %"layer2.1.bn1.running_var", %"val_94") {momentum=0.9, eps=1e-05}
    132 |  # node_aten_relu_132
           %"val_relu_7"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_42")
    133 |  # node_Shape_133
           %"val_95"<?,?> ⬅️ ::Shape(%"layer2.1.conv2.weight") {end=1, start=0}
    134 |  # node_Constant_134
           %"val_96"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    135 |  # node_Expand_135
           %"val_97"<?,?> ⬅️ ::Expand(%"val_95", %"val_96")
    136 |  # node_CastLike_136
           %"val_98"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_7")
    137 |  # node_Expand_137
           %"val_99"<?,?> ⬅️ ::Expand(%"val_98", %"val_97")
    138 |  # node_Constant_138
           %"val_100"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    139 |  # node_Unsqueeze_139
           %"val_101"<?,?> ⬅️ ::Unsqueeze(%"val_relu_7", %"val_100")
    140 |  # node_Conv_140
           %"val_102"<?,?> ⬅️ ::Conv(%"val_101", %"layer2.1.conv2.weight", %"val_99") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    141 |  # node_Constant_141
           %"val_103"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    142 |  # node_Squeeze_142
           %"val_convolution_9"<FLOAT,[4,128,28,28]> ⬅️ ::Squeeze(%"val_102", %"val_103")
    143 |  # node_aten_add_143
           %"val_add_12"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer2.1.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    144 |  # node_Constant_144
           %"val_104"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    145 |  # node__aten_native_batch_norm_training_onnx_145
           %"getitem_47"<FLOAT,[4,128,28,28]>, %"val__native_batch_norm_legit_functional_9__1"<FLOAT,[128]>, %"val__native_batch_norm_legit_functional_9__2"<FLOAT,[128]>, %"getitem_50"<FLOAT,[128]>, %"getitem_51"<FLOAT,[128]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_9", %"layer2.1.bn2.weight", %"layer2.1.bn2.bias", %"layer2.1.bn2.running_mean", %"layer2.1.bn2.running_var", %"val_104") {momentum=0.9, eps=1e-05}
    146 |  # node_aten_add_146
           %"val_add_13"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_47", %"val_relu_6") {alpha=1.0}
    147 |  # node_aten_relu_147
           %"val_relu_8"<FLOAT,[4,128,28,28]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_13")
    148 |  # node_Shape_148
           %"val_105"<?,?> ⬅️ ::Shape(%"layer3.0.conv1.weight") {end=1, start=0}
    149 |  # node_Constant_149
           %"val_106"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    150 |  # node_Expand_150
           %"val_107"<?,?> ⬅️ ::Expand(%"val_105", %"val_106")
    151 |  # node_CastLike_151
           %"val_108"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_8")
    152 |  # node_Expand_152
           %"val_109"<?,?> ⬅️ ::Expand(%"val_108", %"val_107")
    153 |  # node_Constant_153
           %"val_110"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    154 |  # node_Unsqueeze_154
           %"val_111"<?,?> ⬅️ ::Unsqueeze(%"val_relu_8", %"val_110")
    155 |  # node_Conv_155
           %"val_112"<?,?> ⬅️ ::Conv(%"val_111", %"layer3.0.conv1.weight", %"val_109") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[2, 2]}
    156 |  # node_Constant_156
           %"val_113"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    157 |  # node_Squeeze_157
           %"val_convolution_10"<FLOAT,[4,256,14,14]> ⬅️ ::Squeeze(%"val_112", %"val_113")
    158 |  # node_aten_add_158
           %"val_add_14"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer3.0.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
    159 |  # node_Constant_159
           %"val_114"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    160 |  # node__aten_native_batch_norm_training_onnx_160
           %"getitem_52"<FLOAT,[4,256,14,14]>, %"val__native_batch_norm_legit_functional_10__1"<FLOAT,[256]>, %"val__native_batch_norm_legit_functional_10__2"<FLOAT,[256]>, %"getitem_55"<FLOAT,[256]>, %"getitem_56"<FLOAT,[256]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_10", %"layer3.0.bn1.weight", %"layer3.0.bn1.bias", %"layer3.0.bn1.running_mean", %"layer3.0.bn1.running_var", %"val_114") {momentum=0.9, eps=1e-05}
    161 |  # node_aten_relu_161
           %"val_relu_9"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_52")
    162 |  # node_Shape_162
           %"val_115"<?,?> ⬅️ ::Shape(%"layer3.0.conv2.weight") {end=1, start=0}
    163 |  # node_Constant_163
           %"val_116"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    164 |  # node_Expand_164
           %"val_117"<?,?> ⬅️ ::Expand(%"val_115", %"val_116")
    165 |  # node_CastLike_165
           %"val_118"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_9")
    166 |  # node_Expand_166
           %"val_119"<?,?> ⬅️ ::Expand(%"val_118", %"val_117")
    167 |  # node_Constant_167
           %"val_120"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    168 |  # node_Unsqueeze_168
           %"val_121"<?,?> ⬅️ ::Unsqueeze(%"val_relu_9", %"val_120")
    169 |  # node_Conv_169
           %"val_122"<?,?> ⬅️ ::Conv(%"val_121", %"layer3.0.conv2.weight", %"val_119") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    170 |  # node_Constant_170
           %"val_123"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    171 |  # node_Squeeze_171
           %"val_convolution_11"<FLOAT,[4,256,14,14]> ⬅️ ::Squeeze(%"val_122", %"val_123")
    172 |  # node_aten_add_172
           %"val_add_15"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer3.0.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    173 |  # node_Constant_173
           %"val_124"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    174 |  # node__aten_native_batch_norm_training_onnx_174
           %"getitem_57"<FLOAT,[4,256,14,14]>, %"val__native_batch_norm_legit_functional_11__1"<FLOAT,[256]>, %"val__native_batch_norm_legit_functional_11__2"<FLOAT,[256]>, %"getitem_60"<FLOAT,[256]>, %"getitem_61"<FLOAT,[256]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_11", %"layer3.0.bn2.weight", %"layer3.0.bn2.bias", %"layer3.0.bn2.running_mean", %"layer3.0.bn2.running_var", %"val_124") {momentum=0.9, eps=1e-05}
    175 |  # node_Shape_175
           %"val_125"<?,?> ⬅️ ::Shape(%"layer3.0.downsample.0.weight") {end=1, start=0}
    176 |  # node_Constant_176
           %"val_126"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    177 |  # node_Expand_177
           %"val_127"<?,?> ⬅️ ::Expand(%"val_125", %"val_126")
    178 |  # node_CastLike_178
           %"val_128"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_8")
    179 |  # node_Expand_179
           %"val_129"<?,?> ⬅️ ::Expand(%"val_128", %"val_127")
    180 |  # node_Constant_180
           %"val_130"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    181 |  # node_Unsqueeze_181
           %"val_131"<?,?> ⬅️ ::Unsqueeze(%"val_relu_8", %"val_130")
    182 |  # node_Conv_182
           %"val_132"<?,?> ⬅️ ::Conv(%"val_131", %"layer3.0.downsample.0.weight", %"val_129") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[0, 0, 0, 0], strides=[2, 2]}
    183 |  # node_Constant_183
           %"val_133"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    184 |  # node_Squeeze_184
           %"val_convolution_12"<FLOAT,[4,256,14,14]> ⬅️ ::Squeeze(%"val_132", %"val_133")
    185 |  # node_aten_add_185
           %"val_add_16"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer3.0.downsample.1.num_batches_tracked", %"val_6") {alpha=1.0}
    186 |  # node_Constant_186
           %"val_134"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    187 |  # node__aten_native_batch_norm_training_onnx_187
           %"getitem_62"<FLOAT,[4,256,14,14]>, %"val__native_batch_norm_legit_functional_12__1"<FLOAT,[256]>, %"val__native_batch_norm_legit_functional_12__2"<FLOAT,[256]>, %"getitem_65"<FLOAT,[256]>, %"getitem_66"<FLOAT,[256]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_12", %"layer3.0.downsample.1.weight", %"layer3.0.downsample.1.bias", %"layer3.0.downsample.1.running_mean", %"layer3.0.downsample.1.running_var", %"val_134") {momentum=0.9, eps=1e-05}
    188 |  # node_aten_add_188
           %"val_add_17"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_57", %"getitem_62") {alpha=1.0}
    189 |  # node_aten_relu_189
           %"val_relu_10"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_17")
    190 |  # node_Shape_190
           %"val_135"<?,?> ⬅️ ::Shape(%"layer3.1.conv1.weight") {end=1, start=0}
    191 |  # node_Constant_191
           %"val_136"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    192 |  # node_Expand_192
           %"val_137"<?,?> ⬅️ ::Expand(%"val_135", %"val_136")
    193 |  # node_CastLike_193
           %"val_138"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_10")
    194 |  # node_Expand_194
           %"val_139"<?,?> ⬅️ ::Expand(%"val_138", %"val_137")
    195 |  # node_Constant_195
           %"val_140"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    196 |  # node_Unsqueeze_196
           %"val_141"<?,?> ⬅️ ::Unsqueeze(%"val_relu_10", %"val_140")
    197 |  # node_Conv_197
           %"val_142"<?,?> ⬅️ ::Conv(%"val_141", %"layer3.1.conv1.weight", %"val_139") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    198 |  # node_Constant_198
           %"val_143"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    199 |  # node_Squeeze_199
           %"val_convolution_13"<FLOAT,[4,256,14,14]> ⬅️ ::Squeeze(%"val_142", %"val_143")
    200 |  # node_aten_add_200
           %"val_add_18"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer3.1.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
    201 |  # node_Constant_201
           %"val_144"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    202 |  # node__aten_native_batch_norm_training_onnx_202
           %"getitem_67"<FLOAT,[4,256,14,14]>, %"val__native_batch_norm_legit_functional_13__1"<FLOAT,[256]>, %"val__native_batch_norm_legit_functional_13__2"<FLOAT,[256]>, %"getitem_70"<FLOAT,[256]>, %"getitem_71"<FLOAT,[256]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_13", %"layer3.1.bn1.weight", %"layer3.1.bn1.bias", %"layer3.1.bn1.running_mean", %"layer3.1.bn1.running_var", %"val_144") {momentum=0.9, eps=1e-05}
    203 |  # node_aten_relu_203
           %"val_relu_11"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_67")
    204 |  # node_Shape_204
           %"val_145"<?,?> ⬅️ ::Shape(%"layer3.1.conv2.weight") {end=1, start=0}
    205 |  # node_Constant_205
           %"val_146"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    206 |  # node_Expand_206
           %"val_147"<?,?> ⬅️ ::Expand(%"val_145", %"val_146")
    207 |  # node_CastLike_207
           %"val_148"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_11")
    208 |  # node_Expand_208
           %"val_149"<?,?> ⬅️ ::Expand(%"val_148", %"val_147")
    209 |  # node_Constant_209
           %"val_150"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    210 |  # node_Unsqueeze_210
           %"val_151"<?,?> ⬅️ ::Unsqueeze(%"val_relu_11", %"val_150")
    211 |  # node_Conv_211
           %"val_152"<?,?> ⬅️ ::Conv(%"val_151", %"layer3.1.conv2.weight", %"val_149") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    212 |  # node_Constant_212
           %"val_153"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    213 |  # node_Squeeze_213
           %"val_convolution_14"<FLOAT,[4,256,14,14]> ⬅️ ::Squeeze(%"val_152", %"val_153")
    214 |  # node_aten_add_214
           %"val_add_19"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer3.1.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    215 |  # node_Constant_215
           %"val_154"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    216 |  # node__aten_native_batch_norm_training_onnx_216
           %"getitem_72"<FLOAT,[4,256,14,14]>, %"val__native_batch_norm_legit_functional_14__1"<FLOAT,[256]>, %"val__native_batch_norm_legit_functional_14__2"<FLOAT,[256]>, %"getitem_75"<FLOAT,[256]>, %"getitem_76"<FLOAT,[256]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_14", %"layer3.1.bn2.weight", %"layer3.1.bn2.bias", %"layer3.1.bn2.running_mean", %"layer3.1.bn2.running_var", %"val_154") {momentum=0.9, eps=1e-05}
    217 |  # node_aten_add_217
           %"val_add_20"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_72", %"val_relu_10") {alpha=1.0}
    218 |  # node_aten_relu_218
           %"val_relu_12"<FLOAT,[4,256,14,14]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_20")
    219 |  # node_Shape_219
           %"val_155"<?,?> ⬅️ ::Shape(%"layer4.0.conv1.weight") {end=1, start=0}
    220 |  # node_Constant_220
           %"val_156"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    221 |  # node_Expand_221
           %"val_157"<?,?> ⬅️ ::Expand(%"val_155", %"val_156")
    222 |  # node_CastLike_222
           %"val_158"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_12")
    223 |  # node_Expand_223
           %"val_159"<?,?> ⬅️ ::Expand(%"val_158", %"val_157")
    224 |  # node_Constant_224
           %"val_160"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    225 |  # node_Unsqueeze_225
           %"val_161"<?,?> ⬅️ ::Unsqueeze(%"val_relu_12", %"val_160")
    226 |  # node_Conv_226
           %"val_162"<?,?> ⬅️ ::Conv(%"val_161", %"layer4.0.conv1.weight", %"val_159") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[2, 2]}
    227 |  # node_Constant_227
           %"val_163"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    228 |  # node_Squeeze_228
           %"val_convolution_15"<FLOAT,[4,512,7,7]> ⬅️ ::Squeeze(%"val_162", %"val_163")
    229 |  # node_aten_add_229
           %"val_add_21"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer4.0.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
    230 |  # node_Constant_230
           %"val_164"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    231 |  # node__aten_native_batch_norm_training_onnx_231
           %"getitem_77"<FLOAT,[4,512,7,7]>, %"val__native_batch_norm_legit_functional_15__1"<FLOAT,[512]>, %"val__native_batch_norm_legit_functional_15__2"<FLOAT,[512]>, %"getitem_80"<FLOAT,[512]>, %"getitem_81"<FLOAT,[512]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_15", %"layer4.0.bn1.weight", %"layer4.0.bn1.bias", %"layer4.0.bn1.running_mean", %"layer4.0.bn1.running_var", %"val_164") {momentum=0.9, eps=1e-05}
    232 |  # node_aten_relu_232
           %"val_relu_13"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_77")
    233 |  # node_Shape_233
           %"val_165"<?,?> ⬅️ ::Shape(%"layer4.0.conv2.weight") {end=1, start=0}
    234 |  # node_Constant_234
           %"val_166"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    235 |  # node_Expand_235
           %"val_167"<?,?> ⬅️ ::Expand(%"val_165", %"val_166")
    236 |  # node_CastLike_236
           %"val_168"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_13")
    237 |  # node_Expand_237
           %"val_169"<?,?> ⬅️ ::Expand(%"val_168", %"val_167")
    238 |  # node_Constant_238
           %"val_170"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    239 |  # node_Unsqueeze_239
           %"val_171"<?,?> ⬅️ ::Unsqueeze(%"val_relu_13", %"val_170")
    240 |  # node_Conv_240
           %"val_172"<?,?> ⬅️ ::Conv(%"val_171", %"layer4.0.conv2.weight", %"val_169") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    241 |  # node_Constant_241
           %"val_173"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    242 |  # node_Squeeze_242
           %"val_convolution_16"<FLOAT,[4,512,7,7]> ⬅️ ::Squeeze(%"val_172", %"val_173")
    243 |  # node_aten_add_243
           %"val_add_22"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer4.0.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    244 |  # node_Constant_244
           %"val_174"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    245 |  # node__aten_native_batch_norm_training_onnx_245
           %"getitem_82"<FLOAT,[4,512,7,7]>, %"val__native_batch_norm_legit_functional_16__1"<FLOAT,[512]>, %"val__native_batch_norm_legit_functional_16__2"<FLOAT,[512]>, %"getitem_85"<FLOAT,[512]>, %"getitem_86"<FLOAT,[512]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_16", %"layer4.0.bn2.weight", %"layer4.0.bn2.bias", %"layer4.0.bn2.running_mean", %"layer4.0.bn2.running_var", %"val_174") {momentum=0.9, eps=1e-05}
    246 |  # node_Shape_246
           %"val_175"<?,?> ⬅️ ::Shape(%"layer4.0.downsample.0.weight") {end=1, start=0}
    247 |  # node_Constant_247
           %"val_176"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    248 |  # node_Expand_248
           %"val_177"<?,?> ⬅️ ::Expand(%"val_175", %"val_176")
    249 |  # node_CastLike_249
           %"val_178"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_12")
    250 |  # node_Expand_250
           %"val_179"<?,?> ⬅️ ::Expand(%"val_178", %"val_177")
    251 |  # node_Constant_251
           %"val_180"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    252 |  # node_Unsqueeze_252
           %"val_181"<?,?> ⬅️ ::Unsqueeze(%"val_relu_12", %"val_180")
    253 |  # node_Conv_253
           %"val_182"<?,?> ⬅️ ::Conv(%"val_181", %"layer4.0.downsample.0.weight", %"val_179") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[0, 0, 0, 0], strides=[2, 2]}
    254 |  # node_Constant_254
           %"val_183"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    255 |  # node_Squeeze_255
           %"val_convolution_17"<FLOAT,[4,512,7,7]> ⬅️ ::Squeeze(%"val_182", %"val_183")
    256 |  # node_aten_add_256
           %"val_add_23"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer4.0.downsample.1.num_batches_tracked", %"val_6") {alpha=1.0}
    257 |  # node_Constant_257
           %"val_184"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    258 |  # node__aten_native_batch_norm_training_onnx_258
           %"getitem_87"<FLOAT,[4,512,7,7]>, %"val__native_batch_norm_legit_functional_17__1"<FLOAT,[512]>, %"val__native_batch_norm_legit_functional_17__2"<FLOAT,[512]>, %"getitem_90"<FLOAT,[512]>, %"getitem_91"<FLOAT,[512]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_17", %"layer4.0.downsample.1.weight", %"layer4.0.downsample.1.bias", %"layer4.0.downsample.1.running_mean", %"layer4.0.downsample.1.running_var", %"val_184") {momentum=0.9, eps=1e-05}
    259 |  # node_aten_add_259
           %"val_add_24"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_82", %"getitem_87") {alpha=1.0}
    260 |  # node_aten_relu_260
           %"val_relu_14"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_24")
    261 |  # node_Shape_261
           %"val_185"<?,?> ⬅️ ::Shape(%"layer4.1.conv1.weight") {end=1, start=0}
    262 |  # node_Constant_262
           %"val_186"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    263 |  # node_Expand_263
           %"val_187"<?,?> ⬅️ ::Expand(%"val_185", %"val_186")
    264 |  # node_CastLike_264
           %"val_188"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_14")
    265 |  # node_Expand_265
           %"val_189"<?,?> ⬅️ ::Expand(%"val_188", %"val_187")
    266 |  # node_Constant_266
           %"val_190"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    267 |  # node_Unsqueeze_267
           %"val_191"<?,?> ⬅️ ::Unsqueeze(%"val_relu_14", %"val_190")
    268 |  # node_Conv_268
           %"val_192"<?,?> ⬅️ ::Conv(%"val_191", %"layer4.1.conv1.weight", %"val_189") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    269 |  # node_Constant_269
           %"val_193"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    270 |  # node_Squeeze_270
           %"val_convolution_18"<FLOAT,[4,512,7,7]> ⬅️ ::Squeeze(%"val_192", %"val_193")
    271 |  # node_aten_add_271
           %"val_add_25"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer4.1.bn1.num_batches_tracked", %"val_6") {alpha=1.0}
    272 |  # node_Constant_272
           %"val_194"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    273 |  # node__aten_native_batch_norm_training_onnx_273
           %"getitem_92"<FLOAT,[4,512,7,7]>, %"val__native_batch_norm_legit_functional_18__1"<FLOAT,[512]>, %"val__native_batch_norm_legit_functional_18__2"<FLOAT,[512]>, %"getitem_95"<FLOAT,[512]>, %"getitem_96"<FLOAT,[512]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_18", %"layer4.1.bn1.weight", %"layer4.1.bn1.bias", %"layer4.1.bn1.running_mean", %"layer4.1.bn1.running_var", %"val_194") {momentum=0.9, eps=1e-05}
    274 |  # node_aten_relu_274
           %"val_relu_15"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"getitem_92")
    275 |  # node_Shape_275
           %"val_195"<?,?> ⬅️ ::Shape(%"layer4.1.conv2.weight") {end=1, start=0}
    276 |  # node_Constant_276
           %"val_196"<?,?> ⬅️ ::Constant() {value_ints=[1]}
    277 |  # node_Expand_277
           %"val_197"<?,?> ⬅️ ::Expand(%"val_195", %"val_196")
    278 |  # node_CastLike_278
           %"val_198"<?,?> ⬅️ ::CastLike(%"val_3", %"val_relu_15")
    279 |  # node_Expand_279
           %"val_199"<?,?> ⬅️ ::Expand(%"val_198", %"val_197")
    280 |  # node_Constant_280
           %"val_200"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    281 |  # node_Unsqueeze_281
           %"val_201"<?,?> ⬅️ ::Unsqueeze(%"val_relu_15", %"val_200")
    282 |  # node_Conv_282
           %"val_202"<?,?> ⬅️ ::Conv(%"val_201", %"layer4.1.conv2.weight", %"val_199") {auto_pad=NOTSET, dilations=[1, 1], group=1, pads=[1, 1, 1, 1], strides=[1, 1]}
    283 |  # node_Constant_283
           %"val_203"<?,?> ⬅️ ::Constant() {value_ints=[0]}
    284 |  # node_Squeeze_284
           %"val_convolution_19"<FLOAT,[4,512,7,7]> ⬅️ ::Squeeze(%"val_202", %"val_203")
    285 |  # node_aten_add_285
           %"val_add_26"<INT64,[]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"layer4.1.bn2.num_batches_tracked", %"val_6") {alpha=1.0}
    286 |  # node_Constant_286
           %"val_204"<?,?> ⬅️ ::Constant() {value_ints=[0, 2, 3]}
    287 |  # node__aten_native_batch_norm_training_onnx_287
           %"getitem_97"<FLOAT,[4,512,7,7]>, %"val__native_batch_norm_legit_functional_19__1"<FLOAT,[512]>, %"val__native_batch_norm_legit_functional_19__2"<FLOAT,[512]>, %"getitem_100"<FLOAT,[512]>, %"getitem_101"<FLOAT,[512]> ⬅️ pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(%"val_convolution_19", %"layer4.1.bn2.weight", %"layer4.1.bn2.bias", %"layer4.1.bn2.running_mean", %"layer4.1.bn2.running_var", %"val_204") {momentum=0.9, eps=1e-05}
    288 |  # node_aten_add_288
           %"val_add_27"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_add(%"getitem_97", %"val_relu_14") {alpha=1.0}
    289 |  # node_aten_relu_289
           %"val_relu_16"<FLOAT,[4,512,7,7]> ⬅️ pkg.onnxscript.torch_lib::aten_relu(%"val_add_27")
    290 |  # node_Constant_290
           %"val_205"<?,?> ⬅️ ::Constant() {value=Tensor<INT64,[2]>(array([-1, -2]), name=None)}
    291 |  # node_ReduceMean_291
           %"val_mean"<FLOAT,[4,512,1,1]> ⬅️ ::ReduceMean(%"val_relu_16", %"val_205") {keepdims=True, noop_with_empty_axes=0}
    292 |  # node_Constant_292
           %"val_206"<?,?> ⬅️ ::Constant() {value=Tensor<INT64,[2]>(array([  4, 512]), name=None)}
    293 |  # node_aten_view_293
           %"val_view"<FLOAT,[4,512]> ⬅️ pkg.onnxscript.torch_lib::aten_view(%"val_mean", %"val_206")
    294 |  # node_aten_addmm_294
           %"val_addmm"<FLOAT,[4,1000]> ⬅️ pkg.onnxscript.torch_lib::aten_addmm(%"fc.bias", %"val_view", %"fc.weight") {beta=1.0, alpha=1.0}
    return %"val_addmm"<FLOAT,[4,1000]>
}

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_add(
    inputs=(
        %"self"<?,?>,
        %"other"<?,?>
    ),
    attributes={
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"alpha"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='alpha')}
    1 |  # n1
         %"alpha_0"<?,?> ⬅️ ::CastLike(%"alpha", %"other")
    2 |  # n2
         %"other_1"<?,?> ⬅️ ::Mul(%"other", %"alpha_0")
    3 |  # n3
         %"return_val"<?,?> ⬅️ ::Add(%"self", %"other_1")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(
    inputs=(
        %"input"<?,?>,
        %"weight"<?,?>,
        %"bias"<?,?>,
        %"running_mean"<?,?>,
        %"running_var"<?,?>,
        %"axes"<?,?>
    ),
    attributes={
        momentum: UNDEFINED,
        eps: UNDEFINED
    }
    outputs=(
        %"norm"<?,?>,
        %"mean_2"<?,?>,
        %"rstd"<?,?>,
        %"running_mean_0"<?,?>,
        %"new_running_var"<?,?>
    ),
) {
     0 |  # n0
          %"norm"<?,?>, %"running_mean_0"<?,?>, %"_"<?,?> ⬅️ ::BatchNormalization(%"input", %"weight", %"bias", %"running_mean", %"running_var") {epsilon=RefAttr('epsilon', FLOAT, ref_attr_name='eps'), momentum=RefAttr('momentum', FLOAT, ref_attr_name='momentum'), training_mode=1}
     1 |  # n1
          %"upcast_input"<?,?> ⬅️ ::Cast(%"input") {to=1}
     2 |  # n2
          %"mean"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes")
     3 |  # n3
          %"input_sub_mean"<?,?> ⬅️ ::Sub(%"upcast_input", %"mean")
     4 |  # n4
          %"sqr"<?,?> ⬅️ ::Mul(%"input_sub_mean", %"input_sub_mean")
     5 |  # n5
          %"var"<?,?> ⬅️ ::ReduceMean(%"sqr", %"axes") {keepdims=0}
     6 |  # n6
          %"const"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const')}
     7 |  # n7
          %"eps"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='eps')}
     8 |  # n8
          %"eps_cast"<?,?> ⬅️ ::CastLike(%"eps", %"var")
     9 |  # n9
          %"tmp"<?,?> ⬅️ ::Add(%"var", %"eps_cast")
    10 |  # n10
          %"tmp_1"<?,?> ⬅️ ::Sqrt(%"tmp")
    11 |  # n11
          %"const_cast"<?,?> ⬅️ ::CastLike(%"const", %"tmp_1")
    12 |  # n12
          %"rstd"<?,?> ⬅️ ::Div(%"const_cast", %"tmp_1")
    13 |  # n13
          %"mean_2"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes") {keepdims=0}
    14 |  # n14
          %"tmp_3"<?,?> ⬅️ ::Size(%"input")
    15 |  # n15
          %"tmp_4"<?,?> ⬅️ ::Shape(%"input")
    16 |  # n16
          %"int64_1"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<INT64,[]>(name='int64_1')}
    17 |  # n17
          %"tmp_4_subscripted"<?,?> ⬅️ ::Gather(%"tmp_4", %"int64_1") {axis=0}
    18 |  # n18
          %"tmp_5"<?,?> ⬅️ ::Div(%"tmp_3", %"tmp_4_subscripted")
    19 |  # n19
          %"n"<?,?> ⬅️ ::Cast(%"tmp_5") {to=1}
    20 |  # n20
          %"const_6"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_6')}
    21 |  # n21
          %"const_6_cast"<?,?> ⬅️ ::CastLike(%"const_6", %"n")
    22 |  # n22
          %"tmp_7"<?,?> ⬅️ ::Sub(%"n", %"const_6_cast")
    23 |  # n23
          %"tmp_8"<?,?> ⬅️ ::Div(%"n", %"tmp_7")
    24 |  # n24
          %"unbiased_var"<?,?> ⬅️ ::Mul(%"var", %"tmp_8")
    25 |  # n25
          %"const_9"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_9')}
    26 |  # n26
          %"momentum"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    27 |  # n27
          %"tmp_10"<?,?> ⬅️ ::Sub(%"const_9", %"momentum")
    28 |  # n28
          %"tmp_11"<?,?> ⬅️ ::Mul(%"tmp_10", %"unbiased_var")
    29 |  # n29
          %"tmp_12"<?,?> ⬅️ ::CastLike(%"tmp_11", %"running_var")
    30 |  # n30
          %"momentum_13"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    31 |  # n31
          %"momentum_13_cast"<?,?> ⬅️ ::CastLike(%"momentum_13", %"running_var")
    32 |  # n32
          %"tmp_14"<?,?> ⬅️ ::Mul(%"momentum_13_cast", %"running_var")
    33 |  # n33
          %"new_running_var"<?,?> ⬅️ ::Add(%"tmp_12", %"tmp_14")
    return %"norm"<?,?>, %"mean_2"<?,?>, %"rstd"<?,?>, %"running_mean_0"<?,?>, %"new_running_var"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_relu(
    inputs=(
        %"self"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Relu(%"self")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_view(
    inputs=(
        %"self"<?,?>,
        %"size"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"size_0"<?,?> ⬅️ ::Cast(%"size") {to=7}
    1 |  # n1
         %"return_val"<?,?> ⬅️ ::Reshape(%"self", %"size_0")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_addmm(
    inputs=(
        %"self"<?,?>,
        %"mat1"<?,?>,
        %"mat2"<?,?>
    ),
    attributes={
        beta: FLOAT = 1.0,
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Gemm(%"mat1", %"mat2", %"self") {alpha=RefAttr('alpha', FLOAT, ref_attr_name='alpha'), beta=RefAttr('beta', FLOAT, ref_attr_name='beta')}
    return %"return_val"<?,?>
}

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_add(
    inputs=(
        %"self"<?,?>,
        %"other"<?,?>
    ),
    attributes={
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"alpha"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='alpha')}
    1 |  # n1
         %"alpha_0"<?,?> ⬅️ ::CastLike(%"alpha", %"other")
    2 |  # n2
         %"other_1"<?,?> ⬅️ ::Mul(%"other", %"alpha_0")
    3 |  # n3
         %"return_val"<?,?> ⬅️ ::Add(%"self", %"other_1")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(
    inputs=(
        %"input"<?,?>,
        %"weight"<?,?>,
        %"bias"<?,?>,
        %"running_mean"<?,?>,
        %"running_var"<?,?>,
        %"axes"<?,?>
    ),
    attributes={
        momentum: UNDEFINED,
        eps: UNDEFINED
    }
    outputs=(
        %"norm"<?,?>,
        %"mean_2"<?,?>,
        %"rstd"<?,?>,
        %"running_mean_0"<?,?>,
        %"new_running_var"<?,?>
    ),
) {
     0 |  # n0
          %"norm"<?,?>, %"running_mean_0"<?,?>, %"_"<?,?> ⬅️ ::BatchNormalization(%"input", %"weight", %"bias", %"running_mean", %"running_var") {epsilon=RefAttr('epsilon', FLOAT, ref_attr_name='eps'), momentum=RefAttr('momentum', FLOAT, ref_attr_name='momentum'), training_mode=1}
     1 |  # n1
          %"upcast_input"<?,?> ⬅️ ::Cast(%"input") {to=1}
     2 |  # n2
          %"mean"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes")
     3 |  # n3
          %"input_sub_mean"<?,?> ⬅️ ::Sub(%"upcast_input", %"mean")
     4 |  # n4
          %"sqr"<?,?> ⬅️ ::Mul(%"input_sub_mean", %"input_sub_mean")
     5 |  # n5
          %"var"<?,?> ⬅️ ::ReduceMean(%"sqr", %"axes") {keepdims=0}
     6 |  # n6
          %"const"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const')}
     7 |  # n7
          %"eps"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='eps')}
     8 |  # n8
          %"eps_cast"<?,?> ⬅️ ::CastLike(%"eps", %"var")
     9 |  # n9
          %"tmp"<?,?> ⬅️ ::Add(%"var", %"eps_cast")
    10 |  # n10
          %"tmp_1"<?,?> ⬅️ ::Sqrt(%"tmp")
    11 |  # n11
          %"const_cast"<?,?> ⬅️ ::CastLike(%"const", %"tmp_1")
    12 |  # n12
          %"rstd"<?,?> ⬅️ ::Div(%"const_cast", %"tmp_1")
    13 |  # n13
          %"mean_2"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes") {keepdims=0}
    14 |  # n14
          %"tmp_3"<?,?> ⬅️ ::Size(%"input")
    15 |  # n15
          %"tmp_4"<?,?> ⬅️ ::Shape(%"input")
    16 |  # n16
          %"int64_1"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<INT64,[]>(name='int64_1')}
    17 |  # n17
          %"tmp_4_subscripted"<?,?> ⬅️ ::Gather(%"tmp_4", %"int64_1") {axis=0}
    18 |  # n18
          %"tmp_5"<?,?> ⬅️ ::Div(%"tmp_3", %"tmp_4_subscripted")
    19 |  # n19
          %"n"<?,?> ⬅️ ::Cast(%"tmp_5") {to=1}
    20 |  # n20
          %"const_6"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_6')}
    21 |  # n21
          %"const_6_cast"<?,?> ⬅️ ::CastLike(%"const_6", %"n")
    22 |  # n22
          %"tmp_7"<?,?> ⬅️ ::Sub(%"n", %"const_6_cast")
    23 |  # n23
          %"tmp_8"<?,?> ⬅️ ::Div(%"n", %"tmp_7")
    24 |  # n24
          %"unbiased_var"<?,?> ⬅️ ::Mul(%"var", %"tmp_8")
    25 |  # n25
          %"const_9"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_9')}
    26 |  # n26
          %"momentum"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    27 |  # n27
          %"tmp_10"<?,?> ⬅️ ::Sub(%"const_9", %"momentum")
    28 |  # n28
          %"tmp_11"<?,?> ⬅️ ::Mul(%"tmp_10", %"unbiased_var")
    29 |  # n29
          %"tmp_12"<?,?> ⬅️ ::CastLike(%"tmp_11", %"running_var")
    30 |  # n30
          %"momentum_13"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    31 |  # n31
          %"momentum_13_cast"<?,?> ⬅️ ::CastLike(%"momentum_13", %"running_var")
    32 |  # n32
          %"tmp_14"<?,?> ⬅️ ::Mul(%"momentum_13_cast", %"running_var")
    33 |  # n33
          %"new_running_var"<?,?> ⬅️ ::Add(%"tmp_12", %"tmp_14")
    return %"norm"<?,?>, %"mean_2"<?,?>, %"rstd"<?,?>, %"running_mean_0"<?,?>, %"new_running_var"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_relu(
    inputs=(
        %"self"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Relu(%"self")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_view(
    inputs=(
        %"self"<?,?>,
        %"size"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"size_0"<?,?> ⬅️ ::Cast(%"size") {to=7}
    1 |  # n1
         %"return_val"<?,?> ⬅️ ::Reshape(%"self", %"size_0")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_addmm(
    inputs=(
        %"self"<?,?>,
        %"mat1"<?,?>,
        %"mat2"<?,?>
    ),
    attributes={
        beta: FLOAT = 1.0,
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Gemm(%"mat1", %"mat2", %"self") {alpha=RefAttr('alpha', FLOAT, ref_attr_name='alpha'), beta=RefAttr('beta', FLOAT, ref_attr_name='beta')}
    return %"return_val"<?,?>
}

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_add(
    inputs=(
        %"self"<?,?>,
        %"other"<?,?>
    ),
    attributes={
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"alpha"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='alpha')}
    1 |  # n1
         %"alpha_0"<?,?> ⬅️ ::CastLike(%"alpha", %"other")
    2 |  # n2
         %"other_1"<?,?> ⬅️ ::Mul(%"other", %"alpha_0")
    3 |  # n3
         %"return_val"<?,?> ⬅️ ::Add(%"self", %"other_1")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(
    inputs=(
        %"input"<?,?>,
        %"weight"<?,?>,
        %"bias"<?,?>,
        %"running_mean"<?,?>,
        %"running_var"<?,?>,
        %"axes"<?,?>
    ),
    attributes={
        momentum: UNDEFINED,
        eps: UNDEFINED
    }
    outputs=(
        %"norm"<?,?>,
        %"mean_2"<?,?>,
        %"rstd"<?,?>,
        %"running_mean_0"<?,?>,
        %"new_running_var"<?,?>
    ),
) {
     0 |  # n0
          %"norm"<?,?>, %"running_mean_0"<?,?>, %"_"<?,?> ⬅️ ::BatchNormalization(%"input", %"weight", %"bias", %"running_mean", %"running_var") {epsilon=RefAttr('epsilon', FLOAT, ref_attr_name='eps'), momentum=RefAttr('momentum', FLOAT, ref_attr_name='momentum'), training_mode=1}
     1 |  # n1
          %"upcast_input"<?,?> ⬅️ ::Cast(%"input") {to=1}
     2 |  # n2
          %"mean"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes")
     3 |  # n3
          %"input_sub_mean"<?,?> ⬅️ ::Sub(%"upcast_input", %"mean")
     4 |  # n4
          %"sqr"<?,?> ⬅️ ::Mul(%"input_sub_mean", %"input_sub_mean")
     5 |  # n5
          %"var"<?,?> ⬅️ ::ReduceMean(%"sqr", %"axes") {keepdims=0}
     6 |  # n6
          %"const"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const')}
     7 |  # n7
          %"eps"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='eps')}
     8 |  # n8
          %"eps_cast"<?,?> ⬅️ ::CastLike(%"eps", %"var")
     9 |  # n9
          %"tmp"<?,?> ⬅️ ::Add(%"var", %"eps_cast")
    10 |  # n10
          %"tmp_1"<?,?> ⬅️ ::Sqrt(%"tmp")
    11 |  # n11
          %"const_cast"<?,?> ⬅️ ::CastLike(%"const", %"tmp_1")
    12 |  # n12
          %"rstd"<?,?> ⬅️ ::Div(%"const_cast", %"tmp_1")
    13 |  # n13
          %"mean_2"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes") {keepdims=0}
    14 |  # n14
          %"tmp_3"<?,?> ⬅️ ::Size(%"input")
    15 |  # n15
          %"tmp_4"<?,?> ⬅️ ::Shape(%"input")
    16 |  # n16
          %"int64_1"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<INT64,[]>(name='int64_1')}
    17 |  # n17
          %"tmp_4_subscripted"<?,?> ⬅️ ::Gather(%"tmp_4", %"int64_1") {axis=0}
    18 |  # n18
          %"tmp_5"<?,?> ⬅️ ::Div(%"tmp_3", %"tmp_4_subscripted")
    19 |  # n19
          %"n"<?,?> ⬅️ ::Cast(%"tmp_5") {to=1}
    20 |  # n20
          %"const_6"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_6')}
    21 |  # n21
          %"const_6_cast"<?,?> ⬅️ ::CastLike(%"const_6", %"n")
    22 |  # n22
          %"tmp_7"<?,?> ⬅️ ::Sub(%"n", %"const_6_cast")
    23 |  # n23
          %"tmp_8"<?,?> ⬅️ ::Div(%"n", %"tmp_7")
    24 |  # n24
          %"unbiased_var"<?,?> ⬅️ ::Mul(%"var", %"tmp_8")
    25 |  # n25
          %"const_9"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_9')}
    26 |  # n26
          %"momentum"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    27 |  # n27
          %"tmp_10"<?,?> ⬅️ ::Sub(%"const_9", %"momentum")
    28 |  # n28
          %"tmp_11"<?,?> ⬅️ ::Mul(%"tmp_10", %"unbiased_var")
    29 |  # n29
          %"tmp_12"<?,?> ⬅️ ::CastLike(%"tmp_11", %"running_var")
    30 |  # n30
          %"momentum_13"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    31 |  # n31
          %"momentum_13_cast"<?,?> ⬅️ ::CastLike(%"momentum_13", %"running_var")
    32 |  # n32
          %"tmp_14"<?,?> ⬅️ ::Mul(%"momentum_13_cast", %"running_var")
    33 |  # n33
          %"new_running_var"<?,?> ⬅️ ::Add(%"tmp_12", %"tmp_14")
    return %"norm"<?,?>, %"mean_2"<?,?>, %"rstd"<?,?>, %"running_mean_0"<?,?>, %"new_running_var"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_relu(
    inputs=(
        %"self"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Relu(%"self")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_view(
    inputs=(
        %"self"<?,?>,
        %"size"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"size_0"<?,?> ⬅️ ::Cast(%"size") {to=7}
    1 |  # n1
         %"return_val"<?,?> ⬅️ ::Reshape(%"self", %"size_0")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_addmm(
    inputs=(
        %"self"<?,?>,
        %"mat1"<?,?>,
        %"mat2"<?,?>
    ),
    attributes={
        beta: FLOAT = 1.0,
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Gemm(%"mat1", %"mat2", %"self") {alpha=RefAttr('alpha', FLOAT, ref_attr_name='alpha'), beta=RefAttr('beta', FLOAT, ref_attr_name='beta')}
    return %"return_val"<?,?>
}

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_add(
    inputs=(
        %"self"<?,?>,
        %"other"<?,?>
    ),
    attributes={
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"alpha"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='alpha')}
    1 |  # n1
         %"alpha_0"<?,?> ⬅️ ::CastLike(%"alpha", %"other")
    2 |  # n2
         %"other_1"<?,?> ⬅️ ::Mul(%"other", %"alpha_0")
    3 |  # n3
         %"return_val"<?,?> ⬅️ ::Add(%"self", %"other_1")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(
    inputs=(
        %"input"<?,?>,
        %"weight"<?,?>,
        %"bias"<?,?>,
        %"running_mean"<?,?>,
        %"running_var"<?,?>,
        %"axes"<?,?>
    ),
    attributes={
        momentum: UNDEFINED,
        eps: UNDEFINED
    }
    outputs=(
        %"norm"<?,?>,
        %"mean_2"<?,?>,
        %"rstd"<?,?>,
        %"running_mean_0"<?,?>,
        %"new_running_var"<?,?>
    ),
) {
     0 |  # n0
          %"norm"<?,?>, %"running_mean_0"<?,?>, %"_"<?,?> ⬅️ ::BatchNormalization(%"input", %"weight", %"bias", %"running_mean", %"running_var") {epsilon=RefAttr('epsilon', FLOAT, ref_attr_name='eps'), momentum=RefAttr('momentum', FLOAT, ref_attr_name='momentum'), training_mode=1}
     1 |  # n1
          %"upcast_input"<?,?> ⬅️ ::Cast(%"input") {to=1}
     2 |  # n2
          %"mean"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes")
     3 |  # n3
          %"input_sub_mean"<?,?> ⬅️ ::Sub(%"upcast_input", %"mean")
     4 |  # n4
          %"sqr"<?,?> ⬅️ ::Mul(%"input_sub_mean", %"input_sub_mean")
     5 |  # n5
          %"var"<?,?> ⬅️ ::ReduceMean(%"sqr", %"axes") {keepdims=0}
     6 |  # n6
          %"const"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const')}
     7 |  # n7
          %"eps"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='eps')}
     8 |  # n8
          %"eps_cast"<?,?> ⬅️ ::CastLike(%"eps", %"var")
     9 |  # n9
          %"tmp"<?,?> ⬅️ ::Add(%"var", %"eps_cast")
    10 |  # n10
          %"tmp_1"<?,?> ⬅️ ::Sqrt(%"tmp")
    11 |  # n11
          %"const_cast"<?,?> ⬅️ ::CastLike(%"const", %"tmp_1")
    12 |  # n12
          %"rstd"<?,?> ⬅️ ::Div(%"const_cast", %"tmp_1")
    13 |  # n13
          %"mean_2"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes") {keepdims=0}
    14 |  # n14
          %"tmp_3"<?,?> ⬅️ ::Size(%"input")
    15 |  # n15
          %"tmp_4"<?,?> ⬅️ ::Shape(%"input")
    16 |  # n16
          %"int64_1"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<INT64,[]>(name='int64_1')}
    17 |  # n17
          %"tmp_4_subscripted"<?,?> ⬅️ ::Gather(%"tmp_4", %"int64_1") {axis=0}
    18 |  # n18
          %"tmp_5"<?,?> ⬅️ ::Div(%"tmp_3", %"tmp_4_subscripted")
    19 |  # n19
          %"n"<?,?> ⬅️ ::Cast(%"tmp_5") {to=1}
    20 |  # n20
          %"const_6"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_6')}
    21 |  # n21
          %"const_6_cast"<?,?> ⬅️ ::CastLike(%"const_6", %"n")
    22 |  # n22
          %"tmp_7"<?,?> ⬅️ ::Sub(%"n", %"const_6_cast")
    23 |  # n23
          %"tmp_8"<?,?> ⬅️ ::Div(%"n", %"tmp_7")
    24 |  # n24
          %"unbiased_var"<?,?> ⬅️ ::Mul(%"var", %"tmp_8")
    25 |  # n25
          %"const_9"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_9')}
    26 |  # n26
          %"momentum"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    27 |  # n27
          %"tmp_10"<?,?> ⬅️ ::Sub(%"const_9", %"momentum")
    28 |  # n28
          %"tmp_11"<?,?> ⬅️ ::Mul(%"tmp_10", %"unbiased_var")
    29 |  # n29
          %"tmp_12"<?,?> ⬅️ ::CastLike(%"tmp_11", %"running_var")
    30 |  # n30
          %"momentum_13"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    31 |  # n31
          %"momentum_13_cast"<?,?> ⬅️ ::CastLike(%"momentum_13", %"running_var")
    32 |  # n32
          %"tmp_14"<?,?> ⬅️ ::Mul(%"momentum_13_cast", %"running_var")
    33 |  # n33
          %"new_running_var"<?,?> ⬅️ ::Add(%"tmp_12", %"tmp_14")
    return %"norm"<?,?>, %"mean_2"<?,?>, %"rstd"<?,?>, %"running_mean_0"<?,?>, %"new_running_var"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_relu(
    inputs=(
        %"self"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Relu(%"self")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_view(
    inputs=(
        %"self"<?,?>,
        %"size"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"size_0"<?,?> ⬅️ ::Cast(%"size") {to=7}
    1 |  # n1
         %"return_val"<?,?> ⬅️ ::Reshape(%"self", %"size_0")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_addmm(
    inputs=(
        %"self"<?,?>,
        %"mat1"<?,?>,
        %"mat2"<?,?>
    ),
    attributes={
        beta: FLOAT = 1.0,
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Gemm(%"mat1", %"mat2", %"self") {alpha=RefAttr('alpha', FLOAT, ref_attr_name='alpha'), beta=RefAttr('beta', FLOAT, ref_attr_name='beta')}
    return %"return_val"<?,?>
}

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_add(
    inputs=(
        %"self"<?,?>,
        %"other"<?,?>
    ),
    attributes={
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"alpha"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='alpha')}
    1 |  # n1
         %"alpha_0"<?,?> ⬅️ ::CastLike(%"alpha", %"other")
    2 |  # n2
         %"other_1"<?,?> ⬅️ ::Mul(%"other", %"alpha_0")
    3 |  # n3
         %"return_val"<?,?> ⬅️ ::Add(%"self", %"other_1")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::_aten_native_batch_norm_training_onnx(
    inputs=(
        %"input"<?,?>,
        %"weight"<?,?>,
        %"bias"<?,?>,
        %"running_mean"<?,?>,
        %"running_var"<?,?>,
        %"axes"<?,?>
    ),
    attributes={
        momentum: UNDEFINED,
        eps: UNDEFINED
    }
    outputs=(
        %"norm"<?,?>,
        %"mean_2"<?,?>,
        %"rstd"<?,?>,
        %"running_mean_0"<?,?>,
        %"new_running_var"<?,?>
    ),
) {
     0 |  # n0
          %"norm"<?,?>, %"running_mean_0"<?,?>, %"_"<?,?> ⬅️ ::BatchNormalization(%"input", %"weight", %"bias", %"running_mean", %"running_var") {epsilon=RefAttr('epsilon', FLOAT, ref_attr_name='eps'), momentum=RefAttr('momentum', FLOAT, ref_attr_name='momentum'), training_mode=1}
     1 |  # n1
          %"upcast_input"<?,?> ⬅️ ::Cast(%"input") {to=1}
     2 |  # n2
          %"mean"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes")
     3 |  # n3
          %"input_sub_mean"<?,?> ⬅️ ::Sub(%"upcast_input", %"mean")
     4 |  # n4
          %"sqr"<?,?> ⬅️ ::Mul(%"input_sub_mean", %"input_sub_mean")
     5 |  # n5
          %"var"<?,?> ⬅️ ::ReduceMean(%"sqr", %"axes") {keepdims=0}
     6 |  # n6
          %"const"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const')}
     7 |  # n7
          %"eps"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='eps')}
     8 |  # n8
          %"eps_cast"<?,?> ⬅️ ::CastLike(%"eps", %"var")
     9 |  # n9
          %"tmp"<?,?> ⬅️ ::Add(%"var", %"eps_cast")
    10 |  # n10
          %"tmp_1"<?,?> ⬅️ ::Sqrt(%"tmp")
    11 |  # n11
          %"const_cast"<?,?> ⬅️ ::CastLike(%"const", %"tmp_1")
    12 |  # n12
          %"rstd"<?,?> ⬅️ ::Div(%"const_cast", %"tmp_1")
    13 |  # n13
          %"mean_2"<?,?> ⬅️ ::ReduceMean(%"upcast_input", %"axes") {keepdims=0}
    14 |  # n14
          %"tmp_3"<?,?> ⬅️ ::Size(%"input")
    15 |  # n15
          %"tmp_4"<?,?> ⬅️ ::Shape(%"input")
    16 |  # n16
          %"int64_1"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<INT64,[]>(name='int64_1')}
    17 |  # n17
          %"tmp_4_subscripted"<?,?> ⬅️ ::Gather(%"tmp_4", %"int64_1") {axis=0}
    18 |  # n18
          %"tmp_5"<?,?> ⬅️ ::Div(%"tmp_3", %"tmp_4_subscripted")
    19 |  # n19
          %"n"<?,?> ⬅️ ::Cast(%"tmp_5") {to=1}
    20 |  # n20
          %"const_6"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_6')}
    21 |  # n21
          %"const_6_cast"<?,?> ⬅️ ::CastLike(%"const_6", %"n")
    22 |  # n22
          %"tmp_7"<?,?> ⬅️ ::Sub(%"n", %"const_6_cast")
    23 |  # n23
          %"tmp_8"<?,?> ⬅️ ::Div(%"n", %"tmp_7")
    24 |  # n24
          %"unbiased_var"<?,?> ⬅️ ::Mul(%"var", %"tmp_8")
    25 |  # n25
          %"const_9"<?,?> ⬅️ ::Constant() {value=TensorProtoTensor<FLOAT,[]>(name='const_9')}
    26 |  # n26
          %"momentum"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    27 |  # n27
          %"tmp_10"<?,?> ⬅️ ::Sub(%"const_9", %"momentum")
    28 |  # n28
          %"tmp_11"<?,?> ⬅️ ::Mul(%"tmp_10", %"unbiased_var")
    29 |  # n29
          %"tmp_12"<?,?> ⬅️ ::CastLike(%"tmp_11", %"running_var")
    30 |  # n30
          %"momentum_13"<?,?> ⬅️ ::Constant() {value_float=RefAttr('value_float', FLOAT, ref_attr_name='momentum')}
    31 |  # n31
          %"momentum_13_cast"<?,?> ⬅️ ::CastLike(%"momentum_13", %"running_var")
    32 |  # n32
          %"tmp_14"<?,?> ⬅️ ::Mul(%"momentum_13_cast", %"running_var")
    33 |  # n33
          %"new_running_var"<?,?> ⬅️ ::Add(%"tmp_12", %"tmp_14")
    return %"norm"<?,?>, %"mean_2"<?,?>, %"rstd"<?,?>, %"running_mean_0"<?,?>, %"new_running_var"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_relu(
    inputs=(
        %"self"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Relu(%"self")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_view(
    inputs=(
        %"self"<?,?>,
        %"size"<?,?>
    ),
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"size_0"<?,?> ⬅️ ::Cast(%"size") {to=7}
    1 |  # n1
         %"return_val"<?,?> ⬅️ ::Reshape(%"self", %"size_0")
    return %"return_val"<?,?>
},

<
    opset_imports={'': 18},
>
def pkg.onnxscript.torch_lib::aten_addmm(
    inputs=(
        %"self"<?,?>,
        %"mat1"<?,?>,
        %"mat2"<?,?>
    ),
    attributes={
        beta: FLOAT = 1.0,
        alpha: FLOAT = 1.0
    }
    outputs=(
        %"return_val"<?,?>
    ),
) {
    0 |  # n0
         %"return_val"<?,?> ⬅️ ::Gemm(%"mat1", %"mat2", %"self") {alpha=RefAttr('alpha', FLOAT, ref_attr_name='alpha'), beta=RefAttr('beta', FLOAT, ref_attr_name='beta')}
    return %"return_val"<?,?>
}

Analysis

PyTorch ONNX Conversion Analysis

Model Information

The model has 11689512 parameters and 9620 buffers (non-trainable parameters). Number of parameters per dtype:

defaultdict(<class 'int'>, {torch.float32: 11689512})

Number of buffers per dtype:

defaultdict(<class 'int'>, {torch.float32: 9600, torch.int64: 20})

Inputs:

Outputs:

The FX graph has 275 nodes in total. Number of FX nodes per op:

Of the call_function nodes, the counts of operators used are:

ONNX Conversion Information

All operators in the model have registered ONNX decompositions.

Profile result


  _     ._   __/__   _ _  _  _ _/_   Recorded: 10:49:55  Samples:  1744
 /_//_/// /_\ / //_// / //_'/ //     Duration: 1.967     CPU time: 5.017
/   _/                      v4.6.2

Program: /Users/justinc/Documents/GitHub/torch-onnx/tests/resnet_export.py

1.967 _torch_onnx_export_adapter_with_error_report  torch_onnx/_patch.py:210
└─ 1.965 _torch_onnx_export_adaptor  torch_onnx/_patch.py:139
   ├─ 1.207 export  torch/export/__init__.py:73
   │     [298 frames hidden]  torch, contextlib, copy, tokenize, im...
   ├─ 0.655 exported_program_to_ir  torch_onnx/_core.py:574
   │  ├─ 0.360 wrapper  torch/export/exported_program.py:80
   │  │     [85 frames hidden]  torch, <string>
   │  ├─ 0.147 OnnxRegistry.from_torchlib  torch_onnx/_registration.py:114
   │  │  ├─ 0.088 TracedOnnxFunction.function_ir  ../../onnxscript/onnxscript/values.py:587
   │  │  │  ├─ 0.062 get_src_and_ast  ../../onnxscript/onnxscript/_internal/ast_utils.py:16
   │  │  │  │  └─ 0.044 getsource  inspect.py:1256
   │  │  │  │        [4 frames hidden]  inspect, tokenize
   │  │  │  └─ 0.025 Converter.translate_function_signature  ../../onnxscript/onnxscript/converter.py:1463
   │  │  │     └─ 0.024 Converter._translate_function_signature_common  ../../onnxscript/onnxscript/converter.py:1378
   │  │  └─ 0.055 OpSignature.from_function  torch_onnx/_schemas.py:398
   │  ├─ 0.077 _add_nodes  torch_onnx/_core.py:473
   │  │  └─ 0.076 _handle_call_function_node_with_lowering  torch_onnx/_core.py:355
   │  │     └─ 0.049 TracedOnnxFunction.__call__  ../../onnxscript/onnxscript/values.py:581
   │  │        └─ 0.037 aten_convolution  ../../onnxscript/onnxscript/function_libs/torch_lib/ops/core.py:1982
   │  │           └─ 0.024 OnnxFunction.__call__  ../../onnxscript/onnxscript/values.py:523
   │  │              └─ 0.024 OpRecorder.eval_function  torch_onnx/_building.py:391
   │  └─ 0.058 insert_type_promotion_nodes  torch_onnx/_fx_passes.py:6
   │     └─ 0.055 wrapper  torch/onnx/_internal/diagnostics/infra/decorator.py:71
   │           [20 frames hidden]  torch
   ├─ 0.059 save_model  onnx/__init__.py:278
   │     [3 frames hidden]  onnx, <built-in>
   └─ 0.026 serialize_model  ../../onnxscript/onnxscript/ir/serde.py:983
      └─ 0.026 wrapper  ../../onnxscript/onnxscript/ir/serde.py:93
         └─ 0.026 serialize_model_into  ../../onnxscript/onnxscript/ir/serde.py:987
            └─ 0.026 wrapper  ../../onnxscript/onnxscript/ir/serde.py:93
               └─ 0.025 serialize_graph_into  ../../onnxscript/onnxscript/ir/serde.py:1143
                  └─ 0.025 wrapper  ../../onnxscript/onnxscript/ir/serde.py:93