diff --git a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_activation_threshold_search.ipynb b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_activation_threshold_search.ipynb index 813d75716..186605a7b 100644 --- a/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_activation_threshold_search.ipynb +++ b/tutorials/notebooks/mct_features_notebooks/pytorch/example_pytorch_activation_threshold_search.ipynb @@ -66,23 +66,13 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", "metadata": { "id": "324685b9-5dcc-4d22-80f4-dec9a93d3324", "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "!pip install -q torch torchvision" ] @@ -309,25 +299,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "ba0c6e55-d474-4dc3-9a43-44b736635998", "metadata": { "id": "ba0c6e55-d474-4dc3-9a43-44b736635998" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:Model Compression Toolkit:DepthwiseConv2D is not in model.\n", - "Statistics Collection: 10it [00:10, 1.01s/it]\n", - "Calculating quantization parameters: 100%|██████████| 102/102 [00:16<00:00, 6.03it/s]\n", - "WARNING:Model Compression Toolkit:DepthwiseConv2D is not in model.\n", - "Statistics Collection: 10it [00:10, 1.01s/it]\n", - "Calculating quantization parameters: 100%|██████████| 102/102 [00:16<00:00, 6.06it/s]\n" - ] - } - ], + "outputs": [], "source": [ "quantized_models_dict = {}\n", "\n", @@ -368,617 +345,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac", "metadata": { "id": "a22e6d68-c40f-40bf-ab74-ff453011aeac" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " MobileNetV2(\n", - " (features): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (2): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(16, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=96, bias=False)\n", - " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(96, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (3): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=144, bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(144, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (4): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=144, bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(144, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (6): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (7): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (9): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (10): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (11): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (13): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (14): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (15): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (16): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (17): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(320, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Conv2dNormActivation(\n", - " (0): Conv2d(320, 1280, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(1280, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " )\n", - " (classifier): Sequential(\n", - " (0): Dropout(p=0.2, inplace=False)\n", - " (1): Linear(in_features=1280, out_features=1000, bias=True)\n", - " )\n", - ")\n", - "features Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (2): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(16, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=96, bias=False)\n", - " (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(96, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (3): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=144, bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(144, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (4): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=144, bias=False)\n", - " (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(144, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (6): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (7): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=192, bias=False)\n", - " (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (9): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (10): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (11): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)\n", - " (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(384, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (13): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (14): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=576, bias=False)\n", - " (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(576, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (15): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (16): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (17): InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2dNormActivation(\n", - " (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)\n", - " (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (2): Conv2d(960, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (3): BatchNorm2d(320, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Conv2dNormActivation(\n", - " (0): Conv2d(320, 1280, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(1280, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - ")\n", - "features.0 Conv2dNormActivation(\n", - " (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - ")\n", - "features.0.0 Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - "features.0.1 BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - "features.0.2 ReLU6(inplace=True)\n", - "features.1 InvertedResidual(\n", - " (conv): Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - ")\n", - "features.1.conv Sequential(\n", - " (0): Conv2dNormActivation(\n", - " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - " )\n", - " (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - ")\n", - "features.1.conv.0 Conv2dNormActivation(\n", - " (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n", - " (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU6(inplace=True)\n", - ")\n", - "features.1.conv.0.0 Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n" - ] - } - ], + "outputs": [], "source": [ "for index, (name, layer) in enumerate(float_model.named_modules()):\n", " if index < 10:\n", @@ -1045,18 +417,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "4a5bf3dd", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "10it [00:00, 13.41it/s]\n" - ] - } - ], + "outputs": [], "source": [ "from tqdm import tqdm\n", "import numpy as np\n", @@ -1094,21 +458,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "NGnjrPD_uTd5", "metadata": { "id": "NGnjrPD_uTd5" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{: np.float64(8.0), : np.float64(8.0)}\n", - "{: np.float64(32.0), : np.float64(64.0)}\n" - ] - } - ], + "outputs": [], "source": [ "# layer 4 is the first activation layer - Conv1_relu\n", "optimal_thresholds_relu = {\n", @@ -1142,23 +497,12 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "VPb8tBNGpJjo", "metadata": { "id": "VPb8tBNGpJjo" }, - "outputs": [ - { - "data": { - "image/png": "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hBOoR8Xo4+PzyBP4pBKCIkWKWD3PkiWL8uTJ81jvXb58+Ww+E35+fgoMDLQpk6xf3+3bt/Xhhx9a+rHnzJlT/v7+un79eor/hpOb3Ny4cUMmk8lq1rHk2rx5s+rVq2cZz+Hv76/3339fkmziTavvhqioKL388st65plnNHfuXKtjn5rHM8GZM2dUpEgRm+5QCd3nHvWdmNzPdUoldz9ubm6WsY4Jjh07psjISAUEBMjf39/qER0drUuXLkmSateurVdeeUUjRoxQzpw51bx5c82ePTvRcSWPiudh32ElSpTQlStXkuyOnLDug3+//v7+VomXJH300Ue6fv26ihYtqjJlyui9997Tvn37Et1uYsqUKaN69epZPR41IcKDvyGp9duUmObNm2vVqlX69ddfLeN3bt26ZfX5PHbsmA4cOGDz3ib8ViW8v45iNps1ceJEFSlSxOrvdN++fVZ/py4uLmrfvr2WLl2qW7duSbp3cdrT09Myrk+693p///13m9dbr149Sbav92mfFCY9yTBjgm7evKly5cqpa9eulnEjKdW7d2+tXLlSn376qcqUKaOrV6/q6tWrqRzpk7F27VpFRERowYIFWrBggc3yefPmqUGDBmm2/zZt2uiLL77Q8uXL1aJFC33//fcqXry4ypUrZ6nz7bffqnPnzmrRooXee+89BQQEWAYLPjhIMqWSe4U/qRYU476B9fbav3+/XF1dH/qF1adPHzVr1kxLly7VihUrNHToUIWFhWnt2rWqUKFCsvZz/9Xj1JDUsXvUpASp6XFmtqtZs6a++uornTx5Uhs3blStWrVkMplUs2ZNbdy4UXnz5pXZbH7sJMjez06JEiW0e/duxcTEJDmF+b59+5QpUyabk6a0kNTrSM7re/fddzV79mz16dNHISEh8vPzs9yXJKXT5vv5+Slv3ryPPOHbt2+f8uXLZ2lFTu7n9cSJE3rhhRdUvHhxTZgwQYGBgXJ3d9dvv/2miRMn2sSbVt8NnTt31vnz57V9+3absYKpeTztlZbfifbs5/6r7gnMZrMCAgKSnOgn4QKKyWTSDz/8oD///FO//PKLVqxYoa5du2r8+PH6888/La31KYknrT333HM6ceKEfvrpJ61cuVJff/21Jk6cqBkzZuiNN95Ik30m9huSGr9NicmXL5/l5L5x48bKmTOnevbsqbp161rO3cxm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ZXPsfX19bd67M2fOpCimsWPHavr06Zo6daoOHTqksWPH6pNPPtGUKVOSXOfUqVNq0qSJ6tatqz179qhPnz564403tGLFCkudhQsXql+/fho2bJh27dqlcuXKqWHDhrp06VKK4gPgWAveCtGvvWppwVshjg4lRRyeBJnNZs2ePVudOnWSm9tTM08DgHSgR48ecnd318qVK1W7dm3lz59fjRo10urVq/Xvv/9qyJAhlromk0lLly61Wj9r1qxWV6f/97//qWjRosqcObMKFiyooUOHWp1UJnRp+uabbxQUFCQ/Pz+1adNGN27ckHSvtWL9+vWaPHmy5ar76dOnbVod6tSpk+gV+oSr/BMmTFCZMmXk7e2twMBAvfPOO4qOjpZ07+p6ly5dFBkZaVlv+PDhkmy7w509e1bNmzdXlixZ5Ovrq9dee00XL15M9utJ4OHhody5c1s9smXLZnVsp0+frpdeekne3t4aNWqUZdtff/21goODLa0PyY3pwfUkqWLFigoMDNTixYstZYsXL1b+/PlVoUIFq5jNZrPCwsIsrRflypXTDz/8IOleq0vdunUlSdmyZbNpRTKbzRo4cKCyZ8+u3LlzW45vco+rdG+201y5csnHx0ehoaG6c+eOkqNTp06aPXu2VVnCb+T9fvnlF9WoUUPvvfeeihUrpqJFi6pFixb6/PPPreqZTCab9y5XrlzJiiXBli1b1Lx5czVp0kRBQUF69dVX1aBBg4e22syYMUPBwcEaP368SpQooZ49e+rVV1/VxIkTLXUmTJigN998U126dFHJkiU1Y8YMZc6cWbNmzUpRfABgD4cnQatXr9bZs2fVtWtXR4cC4AFfbzypZ0eveeTjjTk7bNZ9Y86OZK379caTdsV29epVrVixQu+88468vLysluXOnVvt27fXwoULH9ll534+Pj4KDw/XwYMHNXnyZH311VdWJ22SdOLECS1dulTLli3TsmXLtH79eo0ZM0aSNHnyZIWEhOjNN9+0XHVPbAKXxYsXW12Zf/nll1WsWDHLyamLi4s+++wzHThwQHPmzNHatWs1cOBASfe61k2aNMnqCv+AAQNs9mE2m9W8eXNdvXpV69ev16pVq3Ty5Em1bt062a8nJYYPH66WLVvq77//tnyfHz9+XD/++KMWL16sPXv2JDumB9e7X9euXa2ShFmzZqlLly428YSF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5REfH6/ChQvr7t27mjJlik6ePKlvvvlGM2bMsNlHdHS01qxZoytXrlglcwnq1aunMmXKqH379tq1a5e2b9+ujh07qnbt2ol2XXuYmJgYqzgvXLigK1eupOzApGJMrq6uOnTokA4ePChXV1eb5T4+PhowYID69u2rOXPm6MSJE9q1a5emTJmiOXPmSLrX5c5kMmnZsmW6fPmypfUoNV5D7969NWvWLM2ePVtHjx7VsGHDdODAAavtLFmyRMWLF09yP2+++aYuX76c5P3zhg8froEDB2rdunU6deqUdu/era5du+ru3btW3QANw7B57y5cuGD5XD4qDklq1qyZRo0apV9//VWnT5/WkiVLNGHCBKsW2MGDB6tjx46W5927d9fJkyc1cOBAHT58WNOmTdP3339vlfT369dPX331lebMmaNDhw7p7bff1s2bNxOd6AIAUhtJEIB0q0iRItqxY4cKFiyo1157TQUKFFCjRo1UtGhRbd682WpA+Pjx4xUYGKhatWqpXbt2GjBggFXXspdeekl9+/ZVz549Vb58eW3ZskVDhw5NcUwDBgyQq6urSpYsKX9/f509e9amzoYNG7R//34VKFBAefLksTzOnTuncuXKacKECRo7dqxKly6tefPmKSwszGr96tWrq3v37mrdurX8/f31ySef2OzDZDLpp59+UrZs2fTcc8+pXr16KliwoBYuXJji1/T7779bxZknTx7VrFkzxdtJzZgedcPsjz/+WEOHDlVYWJhKlCihF198Ub/++quCg4Ml3bsfz4gRIzRo0CDlypXL0r0uNV5D69atNXToUA0cOFCVKlXSmTNn9Pbbb1ttJzIyUkeOHElyP25ubsqZM2eSt46oXbu2Tp48qY4dO6p48eJq1KiRLly4oJUrV1pNdBAVFWXz3t0/xulRcUjSlClT9Oqrr+qdd95RiRIlNGDAAHXr1k0ff/yxpU5ERITVZz04OFi//vqrVq1apXLlymn8+PH6+uuvrVruWrdurU8//VQffvihypcvrz179uj3339P8RTeAGAPk5GOp2aLioqSn5+fIiMjH/pj+KRMXHU00fK+9YsmWg48Le7cuaNTp07Z3JclPRo2bJgmTJigVatW6dlnn3V0OACQLBnpexjO5WmaGCEluQETIwDIUEaMGKGgoCD9+eefqlq1qs1YBgAAAJIgABkOYwoAAMDDcIkUAAAAgFMhCQIAAADgVOgOBwAAAMAuQxqX0O278fLKZHvLgqcZSRAAAAAAu4TWKujoEOxCdzgAAAAAToUkCAAAAIBToTscAAAAALvM3HjSMiYoPXWNoyUIANLYunXrZDKZdP369TTdT1BQkCZNmpSm+8jo6tSpoz59+qT6docPH67y5cun+nYBwNFG/XZIn648qlG/HXJ0KClCEgQgXTt37py6du2qvHnzyt3dXQUKFFDv3r3133//OSSexE6iq1evroiICPn5+aXKPsLDw5U1a1ab8h07duitt95KlX0k6Ny5s0wmk83jxRdfTNX9JDeO7t272yzr0aOHTCaTOnfunOztPanENLlOnz4tk8mkgIAA3bhxw2pZ+fLlNXz4cKuyAwcO6LXXXpO/v788PDxUtGhRffjhh7p165bNtnfv3q1WrVopV65c8vT0VJEiRfTmm2/q6NGjVvves2dPorE9+HkLDw+3fA5cXFyUL18+denSRZcuXbLUuf+z4ufnpxo1amjt2rWW5Z07d1aLFi2snptMJo0ZM8Zq30uXLpXJZLIqMwxDX331lUJCQuTr66ssWbKoVKlS6t27t44fP57oa3iYSZMmqVixYvLy8lJgYKD69u2rO3fuPHSdffv2qVatWvL09FRgYKA++eQTmzqLFi1S8eLF5enpqTJlyui3335LcWwA0g5JEIB06+TJk6pcubKOHTum7777TsePH9eMGTO0Zs0ahYSE6OrVq44OUZLk7u6u3Llz25zMpTZ/f39lzpw51bf74osvKiIiwurx3XffJVn/7t27NmWxsbF27fv+9QIDA7VgwQLdvn3bUnbnzh3Nnz9f+fPnt2v7T5sbN27o008/fWidP//8U9WqVVNsbKx+/fVXHT16VKNGjVJ4eLjq169vdcyWLVumZ599VjExMZo3b54OHTqkb7/9Vn5+fho6dKjdcfr6+ioiIkL//POPvvrqKy1fvlyvv/66VZ3Zs2crIiJCmzdvVs6cOdW0aVOdPHkyyW16enpq7NixunbtWpJ1DMNQu3bt1KtXLzVu3FgrV67UwYMHNXPmTHl6emrkyJEpeh3z58/XoEGDNGzYMB06dEgzZ87UwoUL9f777ye5TlRUlBo0aKACBQror7/+0rhx4zR8+HB9+eWXljpbtmxR27ZtFRoaqt27d6tFixZq0aKF9u/fn6L4AKQdkiAA6VaPHj3k7u6ulStXqnbt2sqfP78aNWqk1atX699//9WQIUMsdU0mk5YuXWq1ftasWRUeHm55/r///U9FixZV5syZVbBgQQ0dOtTqhD6hS9M333yjoKAg+fn5qU2bNpYr9507d9b69es1efJky1Xw06dP27Q61KlTJ9HWldOnT0uSJkyYoDJlysjb21uBgYF65513FB0dLeleC0aXLl0UGRlpWS+hleDB7nBnz55V8+bNlSVLFvn6+uq1117TxYsXk/16Enh4eCh37txWj2zZslkd2+nTp+ull16St7e3Ro0aZdn2119/reDgYHl6eqYopgfXk6SKFSsqMDBQixcvtpQtXrxY+fPnV4UKFaxiNpvNCgsLU3BwsLy8vFSuXDn98MMPku61fNStW1eSlC1bNptWJLPZrIEDByp79uzKnTu3TSvMo16DJI0ZM0a5cuWSj4+PQkNDH9mykODdd9/VhAkTrFpV7mcYhkJDQ1WiRAktXrxYVatWVYECBdSqVSv98ssv2rp1qyZOnChJunXrlrp06aLGjRvr559/Vr169RQcHKxq1arp008/1RdffJGsmBJjMpmUO3du5c2bV40aNVKvXr20evVqqwQ1a9asyp07t0qXLq3p06fr9u3bWrVqVZLbrFevnnLnzq2wsLAk6yxcuFALFizQwoULNXToUD377LPKnz+/nn32WY0dO1azZ89O0evYsmWLatSooXbt2ikoKEgNGjRQ27ZttX379iTXmTdvnmJjYzVr1iyVKlVKbdq0Ua9evTRhwgRLncmTJ+vFF1/Ue++9pxIlSujjjz9WxYoVNXXq1BTFByDtkAQBSNLXG0/q2dFrHvl4Y84Om3XfmLMjWet+vTHpK8MPc/XqVa1YsULvvPOOvLy8rJblzp1b7du318KFC2UYRrK36ePjo/DwcB08eFCTJ0/WV199ZTmhTHDixAktXbpUy5Yt07Jly7R+/XpLF57JkycrJCREb775pqXFJDAw0GY/ixcvtmpVefnll1WsWDHlypVLkuTi4qLPPvtMBw4c0Jw5c7R27VoNHDhQ0r2udZMmTbJciY+IiNCAAQNs9mE2m9W8eXNdvXpV69ev16pVq3Ty5Em1bt062a8nJYYPH66WLVvq77//VteuXSVJx48f148//qjFixdrz549yY7pwfXu17VrV6sT3VmzZqlLly428YSF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -1177,23 +521,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "Df7eKzh4oj5X", "metadata": { "id": "Df7eKzh4oj5X" }, - "outputs": [ - { - "data": { - "image/png": "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mjhxornszJkzslgsmjJliiTbz6Zdu3b6/PPPJVl3t7ndF198YV5nVatW1ebNm+8YnyRNmzZN0dHRGj16tFWyJt26kYiMjJTFYtGwYcPM5cnnfvXq1ercubPy588vb29vtWnTRhcvXjTLZfQzeeaZZ1SuXDnt3LlTtWrVUu7cuVW8eHH98MMPkqRVq1apWrVq8vDwUKlSpbR8+XKreP/++2+99dZbKlWqlDw8PJQ/f3698sormb4pHz16tK5du6YvvvjCKlmTpAIFCmjatGm6cuWKRo8ebS5PawxtatfxzJkz9dxzz8nf319ubm4qW7aseQ2klJ66YdasWXrllVckSc8++6x5vpPP7+3jfO7UbTB5m/Scz4weV5LOnj2rjh07KiAgQO7u7qpYsaIiIyOtyqQcy5WZ6zoz7nac5LrgyJEjqlevnry8vNSqVStJUlJSksaPH69HH31U7u7uCggIUOfOna1+HyRpy5YtioiIUIECBeTh4aHQ0FB16NAhU/FI0sqVK1WzZk15enrK19dXjRo10r59++76Xg3D0PDhw1WoUCHlzp1bzz77rPbs2WNT7ubNmxo6dKhKlCghd3d35c+fXzVq1FBUVNRdj5Ga5557TtKtL2+l//u92Lt3r1q2bKm8efOqRo0aktL/tzO1a+zGjRsaPHiwihcvLjc3NwUHB6t///4220rSN998oyeeeEK5c+dW3rx59fTTT5utdneqwzIqMDDQHLKQkpOTk95//33t3LlTCxcuzNS+b3fhwgX169dP5cuXV548eeTt7a0XXnhBf/31l1nmypUr8vT0VM+ePW22/+eff+Ts7KyRI0eayy5duqRevXopODhYbm5uKl68uD755BOrHk0pf2/Hjx9vfnaO1n3c0dHCBrubM2eOXnrpJbm6uqpFixaaMmWKNm/ebCZg0q1KpGbNmtq3b586dOigxx9/XOfPn9fixYv1zz//qEyZMho2bJgGDRqkTp06qWbNmpJS796SK1cuNWnSRAsWLNC0adOsvuFZtGiRbty4oebNm0u6lcB9+eWXatGihd544w1dvnxZX331lSIiIrRp0yZVqlRJfn5+mjJlit588001adJEL730kiSpQoUKab7n119/XZGRkXr55ZfVt29fbdy4USNHjtS+fftsKufDhw/r5ZdfVseOHdW2bVvNmDFD7dq1U+XKlfXoo49m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HipXrpxKlSqliRMn6plnnsnU/gAgsyxGekf84p7FxsbKx8dHMTEx8vb2tnc4wEPl9la17HBDC9xJXFycjh07ptDQULm7Z6y738Pgo48+0tSpU3Xy5El7hwLgIXanujq9uQEtbAAAINubPHmyqlatqvz582vt2rUaPXq0unXrphMXrikhMUkuzk4qnC+3vcMEYGfZsU4gYQMAANneoUOHNHz4cF24cEGFCxdW3759NXDgQB06d003E5OUy5lh+wCkqzcSsl2dQMIGAACyvXHjxmncuHH2DgMAslz2SS0BAAAA4CFDwgYAAAAADoqEDQAAAAAcFAkbAAAAADgoEjYAAAAAcFAkbAAAAADgoEjYAAAAUvHHH3/IYrHo0qVL9/U4ISEhGj9+/H09Rk73zDPPqFevXlm+3yFDhqhSpUpZvl8gI0jYAADAA3fy5El16NBBBQsWlKurq4oUKaKePXvqv//+y9Lj5PN0VYE8bsrn6XrHcqnd8D/55JM6ffq0fHx8siSWWbNmydfX12b55s2b1alTpyw5RrJ27drJYrHYvJ5//vksPU564+jSpYvNuq5du8pisahdu3bp3t+DSqLT6/jx47JYLHJ2dta///5rte706dNycXGRxWLR8ePHzeULFy5U9erV5ePjIy8vLz366KNW196sWbNS/ezc3d0zFNuUKVNUoUIFeXt7y9vbW2FhYfrll1/M9RcuXFD37t1VqlQpeXh4qHDhwurRo4diYmLuuF/DMDRo0CAFBQXJw8ND4eHhOnTokFWZCxcuqFWrVvL29pavr686duyoK1euZCj++yW9dYIjIWEDAAAP1NGjR1WlShUdOnRI3333nQ4fPqypU6dqxYoVCgsL04ULF7LsWAHe7iro66EA74zd7EqSq6urAgMDZbFYsiye1Pj5+Sl37txZvt/nn39ep0+ftnp99913aZa/efOmzbL4+PhMHTvldsHBwZo7d66uX79uLouLi9O3336rwoULZ2r/juaRRx7R7NmzrZZFRkbqkUcesVq2YsUKNWvWTE2bNtWmTZu0detWffTRRzbn3tvb2+az+/vvvzMUU6FChfTxxx9r69at2rJli5577jk1atRIe/bskSSdOnVKp06d0qeffqrdu3dr1qxZWrZsmTp27HjH/Y4aNUoTJ07U1KlTtXHjRnl6eioiIkJxcXFmmVatWmnPnj2K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6KF69erpt99+0969e/XVV1/J3d1dw4cPz9D7iI+PV506dXT8+HH98MMPOnDggKZPn65HHnnEpuzmzZs1bdo0VahQ4a77XbdunVq0aKGOHTtq+/btaty4sRo3bqzdu3ebZUaNGqWJEydq6tSp2rhxozw9PRUREaG4uLgMvYeMIGEDAAAPVNeuXeXq6qrffvtNtWrVUuHChfXCCy9o+fLl+vfff/Xee++ZZS0WixYtWmS1va+vr2bNmmX+/M4776hkyZLKnTu3ihYtqg8++MAq+Zgy9mM1Ca+hr7/+WiEhIfLx8VHz5s3NFpF27dpp1apVmjBhgtm6cPz4cZvWnGeeeSbVVqvjx49LksaOHavy5cvL09NTwcHBeuutt3TlyhVJt1qG2rdvr5iYGHO75NaX27tEnjhxQo0aNVKePHnk7e2tV199VWfOnDHXJ3fTS+v9JHNzc1NgYKDVK2/evFbndsqUKXrxxRfl6empjz76yNz3l19+qdDQULm7u2coptu3k6THH39cwcHBWrBggblswYIFKly4sB577DGrmJOSkjRy5EiFhobKw8NDFStW1A8//CDpVovSs88+K0nKmzevTetcUlKS+vfvr3z58ikwMNCmdetu70G61RITEBAgLy8vdezYMd034d27d9fYsWOtWqtSMgxDHTt2VJkyZbRgwQI98cQTKlKkiF555RX99NNPWr9+vcaNGydJunbtmtq3b6969epp8eLFCg8PV2hoqKpVq6ZPP/1U06ZNS1dMqbFYLAoMDFTBggX1wgsvqEePHlq+fLlVMu3r66vAwECVK1dOU6ZM0fXr1xUVFZXmPsPDwxUYGKiRI0emWWbevHmaO3eu5s2bpw8++EDVq1dX4cKFVb16dX3yySeaOXNmht7HjBkzdOHCBS1atEhPPfWUQkJCVKtWLVWsWNGq3JUrV9SqVStNnz7d6tpPy4QJE/T888/r7bffVpkyZfThhx/q8ccf16RJkyTd+hzHjx+v999/X40aNVKFChU0e/ZsnTp1yqaeykokbAAA5DBfrjmq6iNW3PX1euRmm21fj9ycrm2/XJP2N+53cuHCBf36669666235OHhYbUuMDBQrVq10rx582QYRrr36eXlpVmzZmnv3r2aMGGCpk+fbt78Jjv59zEtWrRIS5Ys0ZIlS7Rq1SqzG9eECRMUFhamN954w2yJCg4O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mPz586tOnTqaPHmy1UQH0q3uRnPmzLG62fPz89Pp06fNnw8dOmQ1Bfq6detUpEgRvffee6pSpYpKlChhdrvLCFdXV5vxL7c7f/68GjZsqKZNm6p3795W67Zu3aqkpCSNGTNG1atXV8mSJXXq1KkMH6NMmTI6efKkTp48aS7bu3evLl26pLJly2bwXWWNrIrp+eefV3x8vG7evKmIiAib9WXLlpWbm5tOnDih4sWLW72SW8aSW17vdh4z8x7KlCmjjRs3Wm23YcOGDB3niSee0EsvvaQBAwZYLa9UqZJKly6tcePG2SSRf/31l5YvX64WLVpIkurWrasCBQpo1KhRqR7jXh5p4OTkpOLFi6to0aKpJmvSraSkePHiGUrWkn388cfmJCoptWjRQgcOHNCPP/6Yqbhv99RTT+nw4cNW5/LgwYMKCgqSq6urateurV27dmnHjh3mq0qVKmrVqpUWRP1pleilFBYWphUrVlgti4qKMhPn0NBQBQYGWpWJjY3Vxo0bszy5TomEDQAAPFCTJk3SjRs3FBERodWrV+vkyZNatmyZ6tSpYz6XKtlzzz2nSZMmafv27dqyZYu6dOli1ZJSokQJnThxQnPnztWRI0c0ceJELVy4MMMxhYSEaOPGjTp+/LjOnz+fastM06ZNlTt3bg0ZMkTR0dHmKzExUcWLF9fNmzf12Wef6ejRo/r66681depUm2NcuXJFK1as0Pnz51N99lZ4eLjKly+vVq1aadu2bdq0aZPatGmjWrVqpdp98U5u3LhhFWd0dLTOnz+fsROThTE5Oztr37592rt3b6o3zF5eXurXr5969+6tyMhIHTlyRNu2bdNnn32myMhISbe6XVosFi1ZskTnzp0zW+Wy4j307NlTM2bM0MyZM3Xw4EENHjxYe/bssdrPwoUL7zq27KOPPtLKlSutWpQsFou++uor7d27V02bNtWmTZt04sQJzZ8/Xw0bNlRYWJg5BtLT01Nffvmlli5dqhdffFHLly/X8ePHtWXLFvXv39+m2+aBAwesEpMdO3ak+oiGByH5HE+cONFqefPmzfXyyy+refPmGjZsmPm7tmrVKs2bN8/qeti0aZNKly6tf//9N83jvPnmm7pw4YJ69uypgwcPaunSpRoxYoS6du0q6da1VK5cOauXp6en8ufPrxKl/+9LhjZt2mjgwIHmzz179tSy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -1224,37 +557,12 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "631780a79e2cedf0", "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 391/391 [05:52<00:00, 1.11it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Test set: Average loss: -6.4199, Accuracy: 35571/50000 (71%)\n", - "\n", - "Float model's Top 1 accuracy on the Imagenet validation set: 71.14%\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], + "outputs": [], "source": [ "from tqdm import tqdm\n", "import torch.nn.functional as F\n", @@ -1291,54 +599,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613", "metadata": { "id": "07a22d28-56ff-46de-8ed0-1163c3b7a613" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 391/391 [04:52<00:00, 1.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Test set: Average loss: -6.0591, Accuracy: 35955/50000 (72%)\n", - "\n", - "Results for QuantizationErrorMethod.MSE: Loss = -6.05907375, Accuracy = 0.7191\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 391/391 [04:43<00:00, 1.38it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Test set: Average loss: -6.2192, Accuracy: 35927/50000 (72%)\n", - "\n", - "Results for QuantizationErrorMethod.NOCLIPPING: Loss = -6.2191725, Accuracy = 0.71854\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], + "outputs": [], "source": [ "evaluation_results = {}\n", "\n", @@ -1377,21 +643,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "qml4LLmWZLP4", "metadata": { "id": "qml4LLmWZLP4" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Layer indices potentially using ReLU: [5, 9, 16, 20, 27, 31, 39, 43, 50, 54, 62, 66, 74, 78, 85, 89, 97, 101, 109, 113, 121, 125, 132, 136, 144, 148, 156, 160, 167, 171, 179, 183, 191, 195, 202]\n", - "Number of relu layers 35\n" - ] - } - ], + "outputs": [], "source": [ "import torch.nn as nn\n", "\n", @@ -1444,25 +701,12 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207", "metadata": { "id": "43f34133-8ed4-429a-a225-6fb6a6f5b207" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PytorchQuantizationWrapper(\n", - " (layer): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))\n", - ")\n", - "PytorchQuantizationWrapper(\n", - " (layer): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))\n", - ")\n" - ] - } - ], + "outputs": [], "source": [ "for error_method, data in quantized_models_dict.items():\n", " quantized_model = data[\"quantized_model\"]\n", @@ -1512,7 +756,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.9.5" } }, "nbformat": 4,