Apple commited on
Commit
d4a59bd
β€’
1 Parent(s): 90dd41f

added notebooks

Browse files
notebooks/onnx-testing.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
notebooks/pytorch-resnet34-birds-classification.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
notebooks/torch-to-onnx.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"cells":[{"cell_type":"code","execution_count":2,"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2023-01-25T16:50:52.661005Z","iopub.status.busy":"2023-01-25T16:50:52.660467Z","iopub.status.idle":"2023-01-25T16:50:52.667091Z","shell.execute_reply":"2023-01-25T16:50:52.666003Z","shell.execute_reply.started":"2023-01-25T16:50:52.660971Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["True\n"]}],"source":["import torch\n","from torch import nn\n","from torch.nn import functional as F\n","\n","print(torch.cuda.is_available())"]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T16:50:55.037725Z","iopub.status.busy":"2023-01-25T16:50:55.037311Z","iopub.status.idle":"2023-01-25T16:50:55.054107Z","shell.execute_reply":"2023-01-25T16:50:55.053045Z","shell.execute_reply.started":"2023-01-25T16:50:55.037691Z"},"trusted":true},"outputs":[],"source":["class BasicBlock(nn.Module):\n","\n"," def __init__(self, in_channels, out_channels, stride= 1):\n"," super().__init__()\n"," self.conv1 = nn.Conv2d(in_channels, out_channels, 3, stride= stride, padding= 1)\n"," self.conv2 = nn.Conv2d(out_channels, out_channels, 3, stride= 1, padding= 1)\n"," self.bn1 = nn.BatchNorm2d(out_channels)\n"," self.bn2 = nn.BatchNorm2d(out_channels)\n"," self.relu = nn.ReLU(inplace= True)\n","\n"," self.downsample = nn.Sequential()\n"," \n"," if stride != 1:\n"," self.downsample = nn.Sequential(\n"," nn.Conv2d(in_channels, out_channels, 1, stride),\n"," nn.BatchNorm2d(out_channels))\n","\n"," def forward(self, x):\n"," out = self.conv1(x)\n"," out = self.bn1(out)\n"," out = self.relu(out)\n","\n"," out = self.conv2(out)\n"," out = self.bn2(out)\n","\n"," out += self.downsample(x)\n","\n"," out = self.relu(out)\n","\n"," return out\n","\n","class ResNet34(nn.Module):\n"," def __init__(self, num_classes) -> None:\n"," super().__init__()\n","\n"," self.conv1 = nn.Sequential(nn.Conv2d(3, 64, 7, stride= 2, padding= 3),\n"," nn.BatchNorm2d(64), nn.MaxPool2d(3, stride= 2, padding= 1), nn.ReLU(inplace= True))\n","\n"," self.layer0 = self._make_layer(64, 64, 3, 1)\n"," self.layer1 = self._make_layer(64, 128, 4, 2)\n"," self.layer2 = self._make_layer(128, 256, 6, 2)\n"," self.layer3 = self._make_layer(256, 512, 3, 2)\n","\n"," self.avg_pool = nn.AvgPool2d(7)\n"," self.fc = nn.Linear(512, num_classes)\n","\n"," def _make_layer(self, in_channels, out_channels, num_blocks, stride):\n"," \n"," layers = []\n"," layers.append(BasicBlock(in_channels, out_channels, stride))\n","\n"," for i in range(num_blocks - 1):\n"," layers.append(BasicBlock(out_channels, out_channels, 1))\n","\n"," return nn.Sequential(*layers)\n","\n"," def forward(self, x):\n"," out = self.conv1(x)\n"," \n"," out = self.layer0(out)\n"," out = self.layer1(out)\n"," out = self.layer2(out)\n"," out = self.layer3(out)\n","\n"," out = self.avg_pool(out)\n"," out = out.view(out.size(0), -1)\n"," out = self.fc(out)\n","\n"," out = F.log_softmax(out, dim= 1)\n"," return out"]},{"cell_type":"code","execution_count":4,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T16:51:00.019750Z","iopub.status.busy":"2023-01-25T16:51:00.019384Z","iopub.status.idle":"2023-01-25T16:51:04.507098Z","shell.execute_reply":"2023-01-25T16:51:04.506078Z","shell.execute_reply.started":"2023-01-25T16:51:00.019717Z"},"trusted":true},"outputs":[],"source":["model = ResNet34(450)\n","model.load_state_dict(torch.load('/kaggle/input/resnet34/birds_resnet34_model.pth'))\n","\n","dummy_input = torch.randn(1, 3, 224, 224)\n","\n","model.eval()\n","torch_out = model(dummy_input)"]},{"cell_type":"code","execution_count":9,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T17:18:54.390960Z","iopub.status.busy":"2023-01-25T17:18:54.390608Z","iopub.status.idle":"2023-01-25T17:18:56.622507Z","shell.execute_reply":"2023-01-25T17:18:56.621370Z","shell.execute_reply.started":"2023-01-25T17:18:54.390929Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["graph(%input : Float(*, 3, 224, 224, strides=[150528, 50176, 224, 1], requires_grad=0, device=cpu),\n"," %fc.weight : Float(450, 512, strides=[512, 1], requires_grad=1, device=cpu),\n"," %fc.bias : Float(450, strides=[1], requires_grad=1, device=cpu),\n"," %390 : Float(64, 3, 7, 7, strides=[147, 49, 7, 1], requires_grad=0, device=cpu),\n"," %391 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %393 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %394 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %396 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %397 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %399 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %400 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %402 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %403 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %405 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %406 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %408 : Float(64, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %409 : Float(64, strides=[1], requires_grad=0, device=cpu),\n"," %411 : Float(128, 64, 3, 3, strides=[576, 9, 3, 1], requires_grad=0, device=cpu),\n"," %412 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %414 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %415 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %417 : Float(128, 64, 1, 1, strides=[64, 1, 1, 1], requires_grad=0, device=cpu),\n"," %418 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %420 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %421 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %423 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %424 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %426 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %427 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %429 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %430 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %432 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %433 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %435 : Float(128, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %436 : Float(128, strides=[1], requires_grad=0, device=cpu),\n"," %438 : Float(256, 128, 3, 3, strides=[1152, 9, 3, 1], requires_grad=0, device=cpu),\n"," %439 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %441 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %442 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %444 : Float(256, 128, 1, 1, strides=[128, 1, 1, 1], requires_grad=0, device=cpu),\n"," %445 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %447 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %448 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %450 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %451 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %453 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %454 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %456 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %457 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %459 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %460 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %462 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %463 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %465 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %466 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %468 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %469 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %471 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %472 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %474 : Float(256, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %475 : Float(256, strides=[1], requires_grad=0, device=cpu),\n"," %477 : Float(512, 256, 3, 3, strides=[2304, 9, 3, 1], requires_grad=0, device=cpu),\n"," %478 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %480 : Float(512, 512, 3, 3, strides=[4608, 9, 3, 1], requires_grad=0, device=cpu),\n"," %481 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %483 : Float(512, 256, 1, 1, strides=[256, 1, 1, 1], requires_grad=0, device=cpu),\n"," %484 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %486 : Float(512, 512, 3, 3, strides=[4608, 9, 3, 1], requires_grad=0, device=cpu),\n"," %487 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %489 : Float(512, 512, 3, 3, strides=[4608, 9, 3, 1], requires_grad=0, device=cpu),\n"," %490 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %492 : Float(512, 512, 3, 3, strides=[4608, 9, 3, 1], requires_grad=0, device=cpu),\n"," %493 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %495 : Float(512, 512, 3, 3, strides=[4608, 9, 3, 1], requires_grad=0, device=cpu),\n"," %496 : Float(512, strides=[1], requires_grad=0, device=cpu),\n"," %497 : Long(1, strides=[1], requires_grad=0, device=cpu)):\n"," %389 : Float(*, 64, 112, 112, strides=[802816, 12544, 112, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[7, 7], pads=[3, 3, 3, 3], strides=[2, 2]](%input, %390, %391) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %input.4 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::MaxPool[kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[2, 2]](%389) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:797:0\n"," %258 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.4) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.12 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%258, %393, %394) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %261 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.12) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %395 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%261, %396, %397) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %264 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Add(%395, %258) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.20 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%264) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.28 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.20, %399, %400) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %268 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.28) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %401 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%268, %402, %403) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %271 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Add(%401, %input.20) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.36 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%271) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.44 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.36, %405, %406) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %275 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.44) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %407 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%275, %408, %409) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %278 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Add(%407, %input.36) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.52 : Float(*, 64, 56, 56, strides=[200704, 3136, 56, 1], requires_grad=1, device=cpu) = onnx::Relu(%278) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.60 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[2, 2]](%input.52, %411, %412) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %282 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.60) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %413 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%282, %414, %415) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %416 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[1, 1], pads=[0, 0, 0, 0], strides=[2, 2]](%input.52, %417, %418) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %287 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Add(%413, %416) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.72 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%287) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.80 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.72, %420, %421) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %291 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.80) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %422 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%291, %423, %424) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %294 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Add(%422, %input.72) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.88 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%294) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.96 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.88, %426, %427) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %298 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.96) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %428 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%298, %429, %430) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %301 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Add(%428, %input.88) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.104 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%301) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.112 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.104, %432, %433) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %305 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.112) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %434 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%305, %435, %436) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %308 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Add(%434, %input.104) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.120 : Float(*, 128, 28, 28, strides=[100352, 784, 28, 1], requires_grad=1, device=cpu) = onnx::Relu(%308) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.128 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[2, 2]](%input.120, %438, %439) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %312 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.128) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %440 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%312, %441, %442) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %443 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[1, 1], pads=[0, 0, 0, 0], strides=[2, 2]](%input.120, %444, %445) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %317 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%440, %443) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.140 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%317) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.148 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.140, %447, %448) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %321 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.148) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %449 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%321, %450, %451) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %324 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%449, %input.140) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.156 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%324) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.164 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.156, %453, %454) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %328 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.164) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %455 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%328, %456, %457) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %331 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%455, %input.156) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.172 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%331) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.180 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.172, %459, %460) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %335 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.180) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %461 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%335, %462, %463) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %338 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%461, %input.172) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.188 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%338) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.196 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.188, %465, %466) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %342 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.196) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %467 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%342, %468, %469) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %345 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%467, %input.188) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.204 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%345) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.212 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.204, %471, %472) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %349 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.212) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %473 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%349, %474, %475) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %352 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Add(%473, %input.204) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.220 : Float(*, 256, 14, 14, strides=[50176, 196, 14, 1], requires_grad=1, device=cpu) = onnx::Relu(%352) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.228 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[2, 2]](%input.220, %477, %478) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %356 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.228) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %479 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%356, %480, %481) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %482 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[1, 1], pads=[0, 0, 0, 0], strides=[2, 2]](%input.220, %483, %484) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %361 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Add(%479, %482) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.240 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%361) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.248 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.240, %486, %487) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %365 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.248) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %488 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%365, %489, %490) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %368 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Add(%488, %input.240) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %input.256 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%368) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %input.264 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%input.256, %492, %493) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %372 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%input.264) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %494 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[3, 3], pads=[1, 1, 1, 1], strides=[1, 1]](%372, %495, %496) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/conv.py:444:0\n"," %375 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Add(%494, %input.256) # /tmp/ipykernel_23/1263192908.py:26:0\n"," %376 : Float(*, 512, 7, 7, strides=[25088, 49, 7, 1], requires_grad=1, device=cpu) = onnx::Relu(%375) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1440:0\n"," %377 : Float(*, 512, 7, 7, device=cpu) = onnx::Pad[mode=\"constant\", pads=[0, 0, 0, 0, 0, 0, 0, 0], value=0.](%376) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/pooling.py:623:0\n"," %378 : Float(*, 512, 1, 1, strides=[512, 1, 1, 1], requires_grad=1, device=cpu) = onnx::AveragePool[kernel_shape=[7, 7], pads=[0, 0, 0, 0], strides=[7, 7]](%377) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/pooling.py:623:0\n"," %379 : Long(4, strides=[1], device=cpu) = onnx::Shape(%378) # /tmp/ipykernel_23/1263192908.py:66:0\n"," %380 : Long(device=cpu) = onnx::Constant[value={0}]() # /tmp/ipykernel_23/1263192908.py:66:0\n"," %381 : Long(device=cpu) = onnx::Gather[axis=0](%379, %380) # /tmp/ipykernel_23/1263192908.py:66:0\n"," %383 : Long(1, strides=[1], device=cpu) = onnx::Unsqueeze[axes=[0]](%381)\n"," %385 : Long(2, strides=[1], device=cpu) = onnx::Concat[axis=0](%383, %497) # /tmp/ipykernel_23/1263192908.py:66:0\n"," %386 : Float(*, 512, strides=[512, 1], requires_grad=1, device=cpu) = onnx::Reshape(%378, %385) # /tmp/ipykernel_23/1263192908.py:66:0\n"," %out : Float(*, 450, strides=[450, 1], requires_grad=1, device=cpu) = onnx::Gemm[alpha=1., beta=1., transB=1](%386, %fc.weight, %fc.bias) # /opt/conda/lib/python3.7/site-packages/torch/nn/modules/linear.py:103:0\n"," %output : Float(*, 450, strides=[450, 1], requires_grad=1, device=cpu) = onnx::LogSoftmax[axis=1](%out) # /opt/conda/lib/python3.7/site-packages/torch/nn/functional.py:1907:0\n"," return (%output)\n","\n"]}],"source":["onnx_path = 'model.onnx'\n","\n","torch.onnx.export(model,\n"," dummy_input,\n"," onnx_path,\n"," verbose=True,\n"," input_names = ['input'], # the model's input names\n"," output_names = ['output'], # the model's output names\n"," dynamic_axes={'input' : {0 : 'batch_size'}, # variable length axes\n"," 'output' : {0 : 'batch_size'}})"]},{"cell_type":"code","execution_count":11,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T17:28:24.913873Z","iopub.status.busy":"2023-01-25T17:28:24.913498Z","iopub.status.idle":"2023-01-25T17:28:25.108519Z","shell.execute_reply":"2023-01-25T17:28:25.107202Z","shell.execute_reply.started":"2023-01-25T17:28:24.913840Z"},"trusted":true},"outputs":[],"source":["import onnx\n","\n","onnx_model = onnx.load(onnx_path)\n","onnx.checker.check_model(onnx_model)"]},{"cell_type":"code","execution_count":13,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T17:29:14.555139Z","iopub.status.busy":"2023-01-25T17:29:14.554771Z","iopub.status.idle":"2023-01-25T17:29:27.407845Z","shell.execute_reply":"2023-01-25T17:29:27.406626Z","shell.execute_reply.started":"2023-01-25T17:29:14.555106Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting onnxruntime\n"," Downloading onnxruntime-1.13.1-cp37-cp37m-manylinux_2_27_x86_64.whl (4.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m0m\n","\u001b[?25hRequirement already satisfied: flatbuffers in /opt/conda/lib/python3.7/site-packages (from onnxruntime) (1.12)\n","Collecting coloredlogs\n"," Downloading coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: sympy in /opt/conda/lib/python3.7/site-packages (from onnxruntime) (1.10.1)\n","Requirement already satisfied: numpy>=1.21.6 in /opt/conda/lib/python3.7/site-packages (from onnxruntime) (1.21.6)\n","Requirement already satisfied: protobuf in /opt/conda/lib/python3.7/site-packages (from onnxruntime) (3.20.3)\n","Requirement already satisfied: packaging in /opt/conda/lib/python3.7/site-packages (from onnxruntime) (23.0)\n","Collecting humanfriendly>=9.1\n"," Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m8.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: mpmath>=0.19 in /opt/conda/lib/python3.7/site-packages (from sympy->onnxruntime) (1.2.1)\n","Installing collected packages: humanfriendly, coloredlogs, onnxruntime\n","Successfully installed coloredlogs-15.0.1 humanfriendly-10.0 onnxruntime-1.13.1\n","\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m"]}],"source":["!pip install onnxruntime"]},{"cell_type":"code","execution_count":14,"metadata":{"execution":{"iopub.execute_input":"2023-01-25T17:29:27.412333Z","iopub.status.busy":"2023-01-25T17:29:27.412002Z","iopub.status.idle":"2023-01-25T17:29:27.771626Z","shell.execute_reply":"2023-01-25T17:29:27.770564Z","shell.execute_reply.started":"2023-01-25T17:29:27.412292Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Exported model has been tested with ONNXRuntime, and the result looks good!\n"]}],"source":["import onnxruntime\n","import numpy as np\n","\n","ort_session = onnxruntime.InferenceSession(onnx_path)\n","\n","def to_numpy(tensor):\n"," return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy()\n","\n","ort_inputs = {ort_session.get_inputs()[0].name: to_numpy(dummy_input)}\n","ort_outs = ort_session.run(None, ort_inputs)\n","\n","np.testing.assert_allclose(to_numpy(torch_out), ort_outs[0], rtol=1e-03, atol=1e-05)\n","\n","print(\"Exported model has been tested with ONNXRuntime, and the result looks good!\")"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.9 (main, Jan 14 2023, 11:40:15) [Clang 14.0.0 (clang-1400.0.29.202)]"},"vscode":{"interpreter":{"hash":"e405c91adbb1fac53486047ae164eba882f9e8b64805e8f58ffb3bd0aaf6255a"}}},"nbformat":4,"nbformat_minor":4}