From b38d7361bd451f1a3a78d55bb5a4733192b08184 Mon Sep 17 00:00:00 2001 From: Alessandro Pappalardo <volcacius@users.noreply.github.com> Date: Thu, 13 Jan 2022 14:47:29 +0000 Subject: [PATCH] Fix scaling_impl_type in final inference layer Signed-off-by: Alessandro Pappalardo <volcacius@users.noreply.github.com> --- .../1-train-mlp-with-brevitas.ipynb | 1021 +---------------- 1 file changed, 16 insertions(+), 1005 deletions(-) diff --git a/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb b/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb index 1d34f1bdb..69ac1f771 100644 --- a/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb +++ b/notebooks/end2end_example/cybersecurity/1-train-mlp-with-brevitas.ipynb @@ -103,113 +103,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "--2022-01-13 11:50:50-- https://zenodo.org/record/4519767/files/unsw_nb15_binarized.npz?download=1\n", - "Resolving zenodo.org (zenodo.org)... 137.138.76.77\n", - "Connecting to zenodo.org (zenodo.org)|137.138.76.77|:443... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 13391907 (13M) [application/octet-stream]\n", - "Saving to: 'unsw_nb15_binarized.npz'\n", - "\n", - " 0K .......... .......... .......... .......... .......... 0% 1.71M 7s\n", - " 50K .......... .......... .......... .......... .......... 0% 2.20M 7s\n", - " 100K .......... .......... .......... .......... .......... 1% 1.72M 7s\n", - " 150K .......... .......... .......... .......... .......... 1% 2.59M 6s\n", - " 200K .......... .......... .......... .......... .......... 1% 1.63M 7s\n", - " 250K .......... .......... .......... .......... .......... 2% 1.97M 7s\n", - " 300K .......... .......... .......... .......... .......... 2% 2.56M 6s\n", - " 350K .......... .......... .......... .......... .......... 3% 1.10M 7s\n", - " 400K .......... .......... .......... .......... .......... 3% 2.69M 7s\n", - " 450K .......... .......... .......... .......... .......... 3% 2.03M 6s\n", - " 500K .......... .......... .......... .......... .......... 4% 2.05M 6s\n", - " 550K .......... .......... .......... .......... .......... 4% 1.97M 6s\n", - " 600K .......... .......... .......... .......... .......... 4% 2.19M 6s\n", - " 650K .......... .......... .......... .......... .......... 5% 2.31M 6s\n", - " 700K .......... .......... .......... .......... .......... 5% 1.51M 6s\n", - " 750K .......... .......... .......... .......... .......... 6% 2.82M 6s\n", - " 800K .......... .......... .......... .......... .......... 6% 2.35M 6s\n", - " 850K .......... .......... .......... .......... .......... 6% 1.08M 6s\n", - " 900K .......... .......... .......... .......... .......... 7% 1.94M 6s\n", - " 950K .......... .......... .......... .......... .......... 7% 1.69M 6s\n", - " 1000K .......... .......... .......... .......... .......... 8% 2.32M 6s\n", - " 1050K .......... .......... .......... .......... .......... 8% 2.34M 6s\n", - " 1100K .......... .......... .......... .......... .......... 8% 2.58M 6s\n", - " 1150K .......... .......... .......... .......... .......... 9% 949K 6s\n", - " 1200K .......... .......... .......... .......... .......... 9% 1.41M 6s\n", - " 1250K .......... .......... .......... .......... .......... 9% 4.16M 6s\n", - " 1300K .......... .......... .......... .......... .......... 10% 2.29M 6s\n", - " 1350K .......... .......... .......... .......... .......... 10% 2.14M 6s\n", - " 1400K .......... .......... .......... .......... .......... 11% 2.21M 6s\n", - " 1450K .......... .......... .......... .......... .......... 11% 2.22M 6s\n", - " 1500K .......... .......... .......... .......... .......... 11% 1.79M 6s\n", - " 1550K .......... .......... .......... .......... .......... 12% 990K 6s\n", - " 1600K .......... .......... .......... .......... .......... 12% 2.12M 6s\n", - " 1650K .......... .......... .......... .......... .......... 12% 1.81M 6s\n", - " 1700K .......... .......... .......... .......... .......... 13% 2.50M 6s\n", - " 1750K .......... .......... .......... .......... .......... 13% 2.39M 6s\n", - " 1800K .......... .......... .......... .......... .......... 14% 993K 6s\n", - " 1850K .......... .......... .......... .......... .......... 14% 3.66M 6s\n", - " 1900K .......... .......... .......... .......... .......... 14% 2.05M 6s\n", - " 1950K .......... .......... .......... .......... .......... 15% 1.83M 6s\n", - " 2000K .......... .......... .......... .......... .......... 15% 2.60M 6s\n", - " 2050K .......... .......... .......... .......... .......... 16% 2.04M 6s\n", - " 2100K .......... .......... .......... .......... .......... 16% 2.24M 6s\n", - " 2150K .......... .......... .......... .......... .......... 16% 2.02M 6s\n", - " 2200K .......... .......... .......... .......... .......... 17% 1.54M 6s\n", - " 2250K .......... .......... .......... .......... .......... 17% 1.06M 6s\n", - " 2300K .......... .......... .......... .......... .......... 17% 3.33M 6s\n", - " 2350K .......... .......... .......... .......... .......... 18% 1.77M 6s\n", - " 2400K .......... .......... .......... .......... .......... 18% 1.44M 6s\n", - " 2450K .......... .......... .......... .......... .......... 19% 2.65M 6s\n", - " 2500K .......... .......... .......... .......... .......... 19% 1.78M 6s\n", - " 2550K .......... .......... .......... .......... .......... 19% 1.39M 6s\n", - " 2600K .......... .......... .......... .......... .......... 20% 2.13M 5s\n", - " 2650K .......... .......... .......... .......... .......... 20% 1.77M 5s\n", - " 2700K .......... .......... .......... .......... .......... 21% 1.60M 5s\n", - " 2750K .......... .......... .......... .......... .......... 21% 677K 6s\n", - " 2800K .......... .......... .......... .......... .......... 21% 5.16M 6s\n", - " 2850K .......... .......... .......... .......... .......... 22% 1.72M 5s\n", - " 2900K .......... .......... .......... .......... .......... 22% 13.3M 5s\n", - " 2950K .......... .......... .......... .......... .......... 22% 2.50M 5s\n", - " 3000K .......... .......... .......... .......... .......... 23% 1.37M 5s\n", - " 3050K .......... .......... .......... .......... .......... 23% 734K 5s\n", - " 3100K .......... .......... .......... .......... .......... 24% 9.25M 5s\n", - " 3150K .......... .......... .......... .......... .......... 24% 1.18M 5s\n", - " 3200K .......... .......... .......... .......... .......... 24% 60.6M 5s\n", - " 3250K .......... .......... .......... .......... .......... 25% 1.64M 5s\n", - " 3300K .......... .......... .......... .......... .......... 25% 1.76M 5s\n", - " 3350K .......... .......... .......... .......... .......... 25% 1.54M 5s\n", - " 3400K .......... .......... .......... .......... .......... 26% 1.56M 5s\n", - " 3450K .......... .......... .......... .......... .......... 26% 1018K 5s\n", - " 3500K .......... .......... .......... .......... .......... 27% 1.55M 5s\n", - " 3550K .......... .......... .......... .......... .......... 27% 1.21M 5s\n", - " 3600K .......... .......... .......... .......... .......... 27% 2.78M 5s\n", - " 3650K .......... .......... .......... .......... .......... 28% 2.79M 5s\n", - " 3700K .......... .......... .......... .......... .......... 28% 2.10M 5s\n", - " 3750K .......... .......... .......... .......... .......... 29% 1.44M 5s\n", - " 3800K .......... .......... .......... .......... .......... 29% 2.38M 5s\n", - " 3850K .......... .......... .......... .......... .......... 29% 2.87M 5s\n", - " 3900K .......... .......... .......... .......... .......... 30% 1.56M 5s\n", - " 3950K .......... .......... .......... .......... .......... 30% 2.50M 5s\n", - " 4000K .......... .......... .......... .......... .......... 30% 1.25M 5s\n", - " 4050K .......... .......... .......... .......... .......... 31% 2.16M 5s\n", - " 4100K .......... .......... .......... .......... .......... 31% 1.62M 5s\n", - " 4150K .......... .......... .......... .......... .......... 32% 3.11M 5s\n", - " 4200K .......... .......... .......... .......... .......... 32% 1.25M 5s\n", - " 4250K .......... .......... .......... .......... .......... 32% 5.60M 5s\n", - " 4300K .......... .......... .......... .......... .......... 33% 1.64M 5s\n", - " 4350K .......... .......... .......... .......... .......... 33% 1.17M 5s\n", - " 4400K .......... .......... .......... .......... .......... 34% 2.21M 5s\n", - " 4450K .......... .......... .......... .......... .......... 34% 1.32M 5s\n" - ] - } - ], + "outputs": [], "source": [ "! wget -O unsw_nb15_binarized.npz https://zenodo.org/record/4519767/files/unsw_nb15_binarized.npz?download=1" ] @@ -223,199 +119,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 4500K .......... .......... .......... .......... .......... 34% 1.93M 5s\n", - " 4550K .......... .......... .......... .......... .......... 35% 2.94M 5s\n", - " 4600K .......... .......... .......... .......... .......... 35% 1.73M 5s\n", - " 4650K .......... .......... .......... .......... .......... 35% 1.79M 5s\n", - " 4700K .......... .......... .......... .......... .......... 36% 1.82M 5s\n", - " 4750K .......... .......... .......... .......... .......... 36% 3.63M 4s\n", - " 4800K .......... .......... .......... .......... .......... 37% 1.59M 4s\n", - " 4850K .......... .......... .......... .......... .......... 37% 1.92M 4s\n", - " 4900K .......... .......... .......... .......... .......... 37% 2.08M 4s\n", - " 4950K .......... .......... .......... .......... .......... 38% 1.46M 4s\n", - " 5000K .......... .......... .......... .......... .......... 38% 3.30M 4s\n", - " 5050K .......... .......... .......... .......... .......... 38% 1.73M 4s\n", - " 5100K .......... .......... .......... .......... .......... 39% 2.67M 4s\n", - " 5150K .......... .......... .......... .......... .......... 39% 1016K 4s\n", - " 5200K .......... .......... .......... .......... .......... 40% 2.61M 4s\n", - " 5250K .......... .......... .......... .......... .......... 40% 2.05M 4s\n", - " 5300K .......... .......... .......... .......... .......... 40% 2.23M 4s\n", - " 5350K .......... .......... .......... .......... .......... 41% 1.68M 4s\n", - " 5400K .......... .......... .......... .......... .......... 41% 2.31M 4s\n", - " 5450K .......... .......... .......... .......... .......... 42% 1.60M 4s\n", - " 5500K .......... .......... .......... .......... .......... 42% 2.89M 4s\n", - " 5550K .......... .......... .......... .......... .......... 42% 1.11M 4s\n", - " 5600K .......... .......... .......... .......... .......... 43% 2.18M 4s\n", - " 5650K .......... .......... .......... .......... .......... 43% 1.07M 4s\n", - " 5700K .......... .......... .......... .......... .......... 43% 2.19M 4s\n", - " 5750K .......... .......... .......... .......... .......... 44% 2.17M 4s\n", - " 5800K .......... .......... .......... .......... .......... 44% 2.00M 4s\n", - " 5850K .......... .......... .......... .......... .......... 45% 2.21M 4s\n", - " 5900K .......... .......... .......... .......... .......... 45% 2.19M 4s\n", - " 5950K .......... .......... .......... .......... .......... 45% 1.02M 4s\n", - " 6000K .......... .......... .......... .......... .......... 46% 1.83M 4s\n", - " 6050K .......... .......... .......... .......... .......... 46% 2.18M 4s\n", - " 6100K .......... .......... .......... .......... .......... 47% 2.65M 4s\n", - " 6150K .......... .......... .......... .......... .......... 47% 2.19M 4s\n", - " 6200K .......... .......... .......... .......... .......... 47% 2.26M 4s\n", - " 6250K .......... .......... .......... .......... .......... 48% 2.07M 4s\n", - " 6300K .......... .......... .......... .......... .......... 48% 2.21M 4s\n", - " 6350K .......... .......... .......... .......... .......... 48% 1.08M 4s\n", - " 6400K .......... .......... .......... .......... .......... 49% 1.77M 4s\n", - " 6450K .......... .......... .......... .......... .......... 49% 1.16M 4s\n", - " 6500K .......... .......... .......... .......... .......... 50% 1.40M 4s\n", - " 6550K .......... .......... .......... .......... .......... 50% 1.79M 4s\n", - " 6600K .......... .......... .......... .......... .......... 50% 1.35M 3s\n", - " 6650K .......... .......... .......... .......... .......... 51% 1.82M 3s\n", - " 6700K .......... .......... .......... .......... .......... 51% 3.76M 3s\n", - " 6750K .......... .......... .......... .......... .......... 51% 1.02M 3s\n", - " 6800K .......... .......... .......... .......... .......... 52% 1.69M 3s\n", - " 6850K .......... .......... .......... .......... .......... 52% 2.08M 3s\n", - " 6900K .......... .......... .......... .......... .......... 53% 1.29M 3s\n", - " 6950K .......... .......... .......... .......... .......... 53% 2.20M 3s\n", - " 7000K .......... .......... .......... .......... .......... 53% 1.05M 3s\n", - " 7050K .......... .......... .......... .......... .......... 54% 2.72M 3s\n", - " 7100K .......... .......... .......... .......... .......... 54% 2.09M 3s\n", - " 7150K .......... .......... .......... .......... .......... 55% 1.59M 3s\n", - " 7200K .......... .......... .......... .......... .......... 55% 1.79M 3s\n", - " 7250K .......... .......... .......... .......... .......... 55% 3.40M 3s\n", - " 7300K .......... .......... .......... .......... .......... 56% 1.66M 3s\n", - " 7350K .......... .......... .......... .......... .......... 56% 2.87M 3s\n", - " 7400K .......... .......... .......... .......... .......... 56% 1.64M 3s\n", - " 7450K .......... .......... .......... .......... .......... 57% 1.78M 3s\n", - " 7500K .......... .......... .......... .......... .......... 57% 1.44M 3s\n", - " 7550K .......... .......... .......... .......... .......... 58% 1.68M 3s\n", - " 7600K .......... .......... .......... .......... .......... 58% 2.16M 3s\n", - " 7650K .......... .......... .......... .......... .......... 58% 1.22M 3s\n", - " 7700K .......... .......... .......... .......... .......... 59% 1.51M 3s\n", - " 7750K .......... .......... .......... .......... .......... 59% 3.80M 3s\n", - " 7800K .......... .......... .......... .......... .......... 60% 2.14M 3s\n", - " 7850K .......... .......... .......... .......... .......... 60% 1.92M 3s\n", - " 7900K .......... .......... .......... .......... .......... 60% 1.95M 3s\n", - " 7950K .......... .......... .......... .......... .......... 61% 1.02M 3s\n", - " 8000K .......... .......... .......... .......... .......... 61% 686K 3s\n", - " 8050K .......... .......... .......... .......... .......... 61% 1.66M 3s\n", - " 8100K .......... .......... .......... .......... .......... 62% 1.33M 3s\n", - " 8150K .......... .......... .......... .......... .......... 62% 2.47M 3s\n", - " 8200K .......... .......... .......... .......... .......... 63% 1.67M 3s\n", - " 8250K .......... .......... .......... .......... .......... 63% 1.83M 3s\n", - " 8300K .......... .......... .......... .......... .......... 63% 2.64M 3s\n", - " 8350K .......... .......... .......... .......... .......... 64% 1.87M 3s\n", - " 8400K .......... .......... .......... .......... .......... 64% 2.22M 3s\n", - " 8450K .......... .......... .......... .......... .......... 64% 1.32M 3s\n", - " 8500K .......... .......... .......... .......... .......... 65% 2.02M 2s\n", - " 8550K .......... .......... .......... .......... .......... 65% 1.73M 2s\n", - " 8600K .......... .......... .......... .......... .......... 66% 1.87M 2s\n", - " 8650K .......... .......... .......... .......... .......... 66% 2.23M 2s\n", - " 8700K .......... .......... .......... .......... .......... 66% 2.15M 2s\n", - " 8750K .......... .......... .......... .......... .......... 67% 1.09M 2s\n", - " 8800K .......... .......... .......... .......... .......... 67% 2.00M 2s\n", - " 8850K .......... .......... .......... .......... .......... 68% 1.81M 2s\n", - " 8900K .......... .......... .......... .......... .......... 68% 1.70M 2s\n", - " 8950K .......... .......... .......... .......... .......... 68% 1.31M 2s\n", - " 9000K .......... .......... .......... .......... .......... 69% 2.41M 2s\n", - " 9050K .......... .......... .......... .......... .......... 69% 1.69M 2s\n", - " 9100K .......... .......... .......... .......... .......... 69% 2.73M 2s\n", - " 9150K .......... .......... .......... .......... .......... 70% 2.18M 2s\n", - " 9200K .......... .......... .......... .......... .......... 70% 2.05M 2s\n", - " 9250K .......... .......... .......... .......... .......... 71% 1.46M 2s\n", - " 9300K .......... .......... .......... .......... .......... 71% 2.35M 2s\n", - " 9350K .......... .......... .......... .......... .......... 71% 2.21M 2s\n", - " 9400K .......... .......... .......... .......... .......... 72% 1.74M 2s\n", - " 9450K .......... .......... .......... .......... .......... 72% 2.12M 2s\n", - " 9500K .......... .......... .......... .......... .......... 73% 797K 2s\n", - " 9550K .......... .......... .......... .......... .......... 73% 3.19M 2s\n", - " 9600K .......... .......... .......... .......... .......... 73% 1.69M 2s\n", - " 9650K .......... .......... .......... .......... .......... 74% 1.47M 2s\n", - " 9700K .......... .......... .......... .......... .......... 74% 1.97M 2s\n", - " 9750K .......... .......... .......... .......... .......... 74% 1.62M 2s\n", - " 9800K .......... .......... .......... .......... .......... 75% 2.12M 2s\n", - " 9850K .......... .......... .......... .......... .......... 75% 2.05M 2s\n", - " 9900K .......... .......... .......... .......... .......... 76% 1.95M 2s\n", - " 9950K .......... .......... .......... .......... .......... 76% 1.01M 2s\n", - " 10000K .......... .......... .......... .......... .......... 76% 2.51M 2s\n", - " 10050K .......... .......... .......... .......... .......... 77% 2.53M 2s\n", - " 10100K .......... .......... .......... .......... .......... 77% 2.10M 2s\n", - " 10150K .......... .......... .......... .......... .......... 77% 1.36M 2s\n", - " 10200K .......... .......... .......... .......... .......... 78% 1.31M 2s\n", - " 10250K .......... .......... .......... .......... .......... 78% 1.75M 2s\n", - " 10300K .......... .......... .......... .......... .......... 79% 3.77M 2s\n", - " 10350K .......... .......... .......... .......... .......... 79% 2.14M 1s\n", - " 10400K .......... .......... .......... .......... .......... 79% 2.44M 1s\n", - " 10450K .......... .......... .......... .......... .......... 80% 1.72M 1s\n", - " 10500K .......... .......... .......... .......... .......... 80% 1.78M 1s\n", - " 10550K .......... .......... .......... .......... .......... 81% 2.27M 1s\n", - " 10600K .......... .......... .......... .......... .......... 81% 1.98M 1s\n", - " 10650K .......... .......... .......... .......... .......... 81% 2.53M 1s\n", - " 10700K .......... .......... .......... .......... .......... 82% 2.03M 1s\n", - " 10750K .......... .......... .......... .......... .......... 82% 1.26M 1s\n", - " 10800K .......... .......... .......... .......... .......... 82% 1.73M 1s\n", - " 10850K .......... .......... .......... .......... .......... 83% 2.74M 1s\n", - " 10900K .......... .......... .......... .......... .......... 83% 1.64M 1s\n", - " 10950K .......... .......... .......... .......... .......... 84% 1.21M 1s\n", - " 11000K .......... .......... .......... .......... .......... 84% 1.53M 1s\n", - " 11050K .......... .......... .......... .......... .......... 84% 2.89M 1s\n", - " 11100K .......... .......... .......... .......... .......... 85% 789K 1s\n", - " 11150K .......... .......... .......... .......... .......... 85% 1.85M 1s\n", - " 11200K .......... .......... .......... .......... .......... 86% 1.90M 1s\n", - " 11250K .......... .......... .......... .......... .......... 86% 936K 1s\n", - " 11300K .......... .......... .......... .......... .......... 86% 2.06M 1s\n", - " 11350K .......... .......... .......... .......... .......... 87% 1.95M 1s\n", - " 11400K .......... .......... .......... .......... .......... 87% 1.97M 1s\n", - " 11450K .......... .......... .......... .......... .......... 87% 2.29M 1s\n", - " 11500K .......... .......... .......... .......... .......... 88% 2.09M 1s\n", - " 11550K .......... .......... .......... .......... .......... 88% 957K 1s\n", - " 11600K .......... .......... .......... .......... .......... 89% 2.78M 1s\n", - " 11650K .......... .......... .......... .......... .......... 89% 1.89M 1s\n", - " 11700K .......... .......... .......... .......... .......... 89% 1.96M 1s\n", - " 11750K .......... .......... .......... .......... .......... 90% 1.71M 1s\n", - " 11800K .......... .......... .......... .......... .......... 90% 1.93M 1s\n", - " 11850K .......... .......... .......... .......... .......... 90% 523K 1s\n", - " 11900K .......... .......... .......... .......... .......... 91% 7.70M 1s\n", - " 11950K .......... .......... .......... .......... .......... 91% 42.7M 1s\n", - " 12000K .......... .......... .......... .......... .......... 92% 4.57M 1s\n", - " 12050K .......... .......... .......... .......... .......... 92% 1.63M 1s\n", - " 12100K .......... .......... .......... .......... .......... 92% 2.15M 1s\n", - " 12150K .......... .......... .......... .......... .......... 93% 1.64M 0s\n", - " 12200K .......... .......... .......... .......... .......... 93% 1.49M 0s\n", - " 12250K .......... .......... .......... .......... .......... 94% 2.46M 0s\n", - " 12300K .......... .......... .......... .......... .......... 94% 1.54M 0s\n", - " 12350K .......... .......... .......... .......... .......... 94% 1.24M 0s\n", - " 12400K .......... .......... .......... .......... .......... 95% 2.09M 0s\n", - " 12450K .......... .......... .......... .......... .......... 95% 1.63M 0s\n", - " 12500K .......... .......... .......... .......... .......... 95% 2.97M 0s\n", - " 12550K .......... .......... .......... .......... .......... 96% 2.20M 0s\n", - " 12600K .......... .......... .......... .......... .......... 96% 1.58M 0s\n", - " 12650K .......... .......... .......... .......... .......... 97% 2.16M 0s\n", - " 12700K .......... .......... .......... .......... .......... 97% 2.64M 0s\n", - " 12750K .......... .......... .......... .......... .......... 97% 1.12M 0s\n", - " 12800K .......... .......... .......... .......... .......... 98% 2.23M 0s\n", - " 12850K .......... .......... .......... .......... .......... 98% 2.04M 0s\n", - " 12900K .......... .......... .......... .......... .......... 99% 1.94M 0s\n", - " 12950K .......... .......... .......... .......... .......... 99% 2.25M 0s\n", - " 13000K .......... .......... .......... .......... .......... 99% 2.04M 0s\n", - " 13050K .......... .......... ........ 100% 1.63M=7.2s\n", - "\n", - "2022-01-13 11:50:58 (1.77 MB/s) - 'unsw_nb15_binarized.npz' saved [13391907/13391907]\n", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Samples in each set: train = 175341, test = 82332\n", - "Shape of one input sample: torch.Size([593])\n" - ] - } - ], + "outputs": [], "source": [ "import numpy as np\n", "from torch.utils.data import TensorDataset\n", @@ -552,340 +258,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Sequential(\n", - " (0): QuantLinear(\n", - " in_features=593, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): Dropout(p=0.5, inplace=False)\n", - " (3): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (4): QuantLinear(\n", - " in_features=64, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (5): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (6): Dropout(p=0.5, inplace=False)\n", - " (7): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (8): QuantLinear(\n", - " in_features=64, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (9): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (10): Dropout(p=0.5, inplace=False)\n", - " (11): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (12): QuantLinear(\n", - " in_features=64, out_features=1, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - ")" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from brevitas.nn import QuantLinear, QuantReLU\n", "import torch.nn as nn\n", @@ -1051,7 +426,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Training loss = 0.132592 test accuracy = 0.808884: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [02:06<00:00, 12.67s/it]\n" + "Training loss = 0.131165 test accuracy = 0.809102: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [02:24<00:00, 14.43s/it]\n" ] } ], @@ -1086,7 +461,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -1112,7 +487,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAsHElEQVR4nO3deXzU1b3/8dcnCZCwhX0NEFRcEAQxooBWrbUFrxZrXXCt2lurrdq99ba/2+X2tret9VZb7eVaC1o3agXrhkCXWxVcStg3USQBQljCkhCWrPP5/TFfdAiTZAKZfJPM+/l4zCPzXc53PjMPmM+cc77nHHN3RERE6koLOwAREWmdlCBERCQuJQgREYlLCUJEROJSghARkbiUIEREJC4lCBERiUsJQto8M9sf84iY2aGY7RuO4Xr/MLN/TUasIm1JRtgBiBwvd+96+LmZFQL/6u5/DS+i5DKzDHevCTsOaf9Ug5B2y8zSzOxeM/vAzHab2bNm1is4lmlmTwb7S81ssZn1N7OfAOcDDwU1kIfqufafzGy7mZWZ2etmdnrMsSwzu9/MNgXHF5pZVnDsPDN7M3jNLWZ2S7D/iFqLmd1iZgtjtt3Mvmxm7wPvB/seDK6xz8yWmNn5Meenm9l3g/deHhwfYmYPm9n9dd7LS2b21eP+wKXdUYKQ9uwe4ArgAmAQsBd4ODj2OSAbGAL0Bu4ADrn794A3gLvcvau731XPtV8FRgD9gKXAUzHHfgmcBUwEegHfBiJmNjQo9xugLzAWWN6E93MFcA4wMtheHFyjF/A08CczywyOfR24DrgU6A7cBhwEHgeuM7M0ADPrA1wMPNOEOCRFqIlJ2rMvEv2iLwIwsx8Cm83sJqCaaGI4yd1XAkuacmF3n3H4eXDdvWaWDZQT/TI+1923Bqe8GZx3A/BXdz/8Zbw7eCTqv9x9T0wMT8Ycu9/M/h9wCrAC+Ffg2+6+Pji+4vBrmlkZ0aTwF2Aa8A9339GEOCRFqAYh7dkw4PmgOacUWAfUAv2BJ4D5wCwzKzazX5hZh0QuGjTf/CxovtkHFAaH+gSPTOCDOEWH1LM/UVvqxPENM1sXNGOVEq0R9UngtR4Hbgye30j0sxA5ihKEtGdbgCnu3iPmkenuW9292t1/5O4jiTYFXQbcHJRrbIrj64GpwCeIfinnBvsN2AVUACfWE0+8/QAHgM4x2wPinPNhXEF/w3eAa4Ce7t4DKAtiaOy1ngSmmtkY4DTgz/WcJylOCULas+nAT8xsGICZ9TWzqcHzi8xstJmlA/uINjnVBuV2ACc0cN1uQCXR5qHOwE8PH3D3CDAD+G8zGxTUNiaYWSei/RSfMLNrzCzDzHqb2dig6HLgSjPrbGYnAZ9v5L11A2qAEiDDzL5PtK/hsEeBH5vZCIs6w8x6BzEWEe2/eAKY7e6HGnktSVFKENKePQi8CCwws3LgbaKdvBD9hf4c0eSwDniN6C/rw+WuMrO9ZvbrONf9A7AJ2AqsDa4b65vAKqJfwnuAnwNp7r6ZaKfxN4L9y4ExQZlfAVVEk9PjHNnpHc98oh3e7wWxVHBkE9R/A88CC4L3+HsgK+b448Bo1LwkDTAtGCSSeszsY0QTYm5Q6xE5imoQIikm6Iz/CvCokoM0RAlCJIWY2WlAKTAQeCDUYKTVUxOTiIjEpRqEiIjE1a5GUvfp08dzc3PDDkNEpM1YsmTJLnfvG+9Yu0oQubm55Ofnhx2GiEibYWab6jumJiYREYlLCUJEROJSghARkbiUIEREJC4lCBERiUsJQkRE4lKCEBGRuNrVOAgRkZaye38lz+YXURv5aL7DujMXxZvI6OhzvMHjca9T56TOnTK444L61oc6dkoQIiLH4IG/vs8Tb9c7xizpzD563qdrJyUIEZHWoOxgNc8tKeKz43L42WdHH3Xc6m6bNXL86NeoWyYMSe2DMLPJZrbezDaY2b1xjmeb2UtmtsLM1pjZrYmWFREJyx/zN3OoupbPnzecDulpRz0y6jzS0+yIR1qdh9nRj9YgaQkiWOv3YWAKMBK4zsxG1jnty8Badx8DXAjcb2YdEywrItLiamojPP7mJs49oRcjB3VvvEAblswaxHhgg7tvdPcqYBYwtc45DnSzaLrsSnSd3poEy4qItLgFa3ewtfQQt00aHnYoSZfMBDGYIxdRLwr2xXoIOA0oJrrI+1eCJRATKSsi0uJmLCxgaK/OXHxa/7BDSbpkJoh4jWh179b6FLAcGASMBR4ys+4Jlo2+iNntZpZvZvklJSXHHq2ISCNWFpWSv2kvt0zMJT2tdfQTJFMyE0QRMCRmO4doTSHWrcAcj9oAFACnJlgWAHd/xN3z3D2vb9+4a16IiDSLmYsK6dopg6vzcsIOpUUkM0EsBkaY2XAz6whMA16sc85m4GIAM+sPnAJsTLCsiEiL2bGvgpdXFnN1Xg7dMjuEHU6LSNo4CHevMbO7gPlAOjDD3deY2R3B8enAj4HHzGwV0Wal77j7LoB4ZZMVq4hIY558exM1EeeWiblhh9JikjpQzt3nAnPr7Jse87wY+GSiZUVEwlBRXctT72zmE6f1Z1jvLmGH02I0WZ+ISCNeXF7MngNVKXFraywlCBGRBrg7MxYVcNrA7px7Qq+ww2lRShAiIg1464PdvLu9nFsn5baaKTBaihKEiEgDZiwqoHeXjnx6zKCwQ2lxShAiIvUo3HWAv727kxvOHUZmh/Sww2lxShAiIvV47M1CMtKMG88dGnYooVCCEBGJY19FNX/K38LlYwbRr1tm2OGEQglCRCSOZxdv4UBVbcrd2hpLCUJEpI7aiPPYm4WMz+3FqMHZYYcTGiUIEZE6/rJ2B0V7D3HbeblhhxIqJQgRkTpmLiogp2cWl4wcEHYooVKCEBGJsXprGe8U7EmZNR8aogQhIhJj5qJCOndM5+q8IY2f3M4pQYiIBHaWV/DSimKuPiuH7KzUWPOhIUoQIiKBp97eTFVthFtS+NbWWEoQIiJAZU0tT72ziYtP7cfwPqmz5kNDlCBERICXVmxj1/4qbjtPtYfDlCBEJOW5OzMWFnBK/25MPLF32OG0GkoQIpLy3inYw9pt+1JyzYeGKEGISMqbsbCAnp07cMWZg8MOpVVRghCRlLZ590H+sm4HN5yTmms+NCSpCcLMJpvZejPbYGb3xjn+LTNbHjxWm1mtmfUKjhWa2argWH4y4xSR1PX4W4Wkm3HThGFhh9LqZCTrwmaWDjwMXAIUAYvN7EV3X3v4HHe/D7gvOP9y4GvuvifmMhe5+65kxSgiqa28opo/Lt7CZWcMpH/31FzzoSHJrEGMBza4+0Z3rwJmAVMbOP864JkkxiMicoTnlhSxv7KGWzUwLq5kJojBwJaY7aJg31HMrDMwGZgds9uBBWa2xMxur+9FzOx2M8s3s/ySkpJmCFtEUsHhNR/OGtaTMUN6hB1Oq5TMBBHvXjGv59zLgUV1mpcmufs4YArwZTP7WLyC7v6Iu+e5e17fvn2PL2IRSRl/f3cnm3YfTOkV4xqTzARRBMROh5gDFNdz7jTqNC+5e3HwdyfwPNEmKxGRZjFzUQGDsjP51On9ww6l1UpmglgMjDCz4WbWkWgSeLHuSWaWDVwAvBCzr4uZdTv8HPgksDqJsYpIClm3bR9vfrCbz03MJSNdd/vXJ2l3Mbl7jZndBcwH0oEZ7r7GzO4Ijk8PTv0MsMDdD8QU7w88H4xozACedvd5yYpVRFLLzEUFZHVIZ9rZQ8MOpVVLWoIAcPe5wNw6+6bX2X4MeKzOvo3AmGTGJiKpadf+Sv68vJhr8nLI7qw1HxqiupWIpJSn39lMVU2EWyaqc7oxShAikjKqaiI88fYmLjylLyf16xp2OK2eEoSIpIxXVhVTUl6pW1sTpAQhIinB3fn9wgJO6teV80f0CTucNkEJQkRSQv6mvazeqjUfmkIJQkRSwoyFBWRndeDKM3PCDqXNUIIQkXavaO9B5q/ZzvXnDCWro9Z8SJQShIi0e394axNmxs1a86FJlCBEpF07UFnDM//czJRRAxiYnRV2OG2KEoSItGuzlxZRXlHDbefp1tamUoIQkXYrEnFmLipk7JAejBvaM+xw2hwlCBFpt157r4SCXQdUezhGShAi0m7NWFTAgO6ZTBk1IOxQ2iQlCBFpl97bUc4b7+/ipgnD6KA1H46JPjURaZdmLiqgU0Ya14/Xmg/HSglCRNqdPQeqmLN0K1eOy6Fnl45hh9NmKUGISLvzzD83U1kT4bZJuWGH0qYpQYhIu1JdG+EPbxVy/og+jOjfLexw2jQlCBFpV+au2saOfZW6tbUZKEGISLvh7sxYWMAJfbpwwYi+YYfT5ilBiEi7sXRzKSuKyrh1Ui5paVrz4XglNUGY2WQzW29mG8zs3jjHv2Vmy4PHajOrNbNeiZQVEalrxqICumdmcOU4rfnQHJKWIMwsHXgYmAKMBK4zs5Gx57j7fe4+1t3HAv8GvObuexIpKyISq7j0EPNWb+e68UPp0ikj7HDahWTWIMYDG9x9o7tXAbOAqQ2cfx3wzDGWFZEU94e3NgFw88TccANpR5KZIAYDW2K2i4J9RzGzzsBkYPYxlL3dzPLNLL+kpOS4gxaRtudgVXTNh0+d3p/BPbTmQ3NJZoKI10Pk9Zx7ObDI3fc0tay7P+Luee6e17ev7loQSUVzlm6l7FA1t03Sra3NKZkJoggYErOdAxTXc+40PmpeampZEUlh0TUfCjgjJ5uzhmnNh+ZUb0+OmV2ZQPkKd59bz7HFwAgzGw5sJZoEro/zOtnABcCNTS0rIvLGhl18UHKAB64di5lubW1ODXX1/w54gfjNPYd9DIibINy9xszuAuYD6cAMd19jZncEx6cHp34GWODuBxorm+B7EpEUMmNhAf26deLS0QPDDqXdaShBvOrutzVU2MyebOh4ULuYW2ff9DrbjwGPJVJWRCTWhp3lvPZeCd+45GQ6Zmjcb3Or9xN19xvrO9aUc0REkmXmokI6ZqRx/Tla8yEZEk65ZnaSmT1pZrPNbEIygxIRaUzpwSpmLy3iM2MH07trp7DDaZca6qTOdPeKmF0/Bn5A9HbTPwFjkxuaiEj9Zi3eQkV1hFvPyw07lHaroRrES2Z2U8x2NZAbPGqTGJOISIOqayM8/mYhk07qzakDuocdTrvVUIKYDGSb2TwzOx/4JtG7lqYAN7REcCIi8cxfs51tZRXcOlED45Kp3iYmd68FHjKzJ4DvAwOBf3f3D1oqOBGReGYsLGBY7858/NR+YYfSrjXUB3EO8C2gCvgpcAj4iZkVAT9297KWCVFEUklVTYTtZRUUlx1iW9khiksrKC49RHHpIbaVVbC19BDlFTX88PKRWvMhyRoaBzEduAroCvyvu08CppnZBcCzwKdaID4RaUciEWfXgUqKSyvYVnqIrcGXfnHpIYqDv7v2V+J1Zl7r2bkDg3pkkdOzM+cM78VJ/boybbxubU22hhJELdEO6c5EaxEAuPtrwGvJDUtE2qJ9FdXRX/qlFcGXf+zzCraVHaK69shv/6wO6QzskcngHlmcckpfBvXIYlB2FoN6ZDGwRyaDsrPI6pge0jtKbQ0liOuBLxJNDje3TDgi0prt2l/JezvK2VZ65K/+w01B+ytrjjg/Pc0Y0D2TgdmZjB3SgymjBzC4RxYDs7MYFHz59+jcQXMotVINdVK/B3yjBWMRkVZsxZZSrvnft6isiXy4r3eXjgzskUlu7y5MPLEPA7MzozWAHtG//bplkq5+gjaroU7ql939soYKJ3KOiLR9ew5UceeTS+jTtRM/++xocnp2ZmB2Jpkd1PTTnjXUxHSemb3YwHEjul60iLRjtRHnK7OWsWt/Fc/dOYEzcnqEHZK0kIYSRCJrQFc1foqItGUP/PU93nh/F/915WglhxTTUB+E7lQSSXF/XbuD3/x9A9fk5TDt7CGNF5B2RROoi0hchbsO8LVnl3P6oO78x9RRutMoBSlBiMhRDlXVcseTS0gzY/qNZ6kzOkU1miDM7DIzUyIRSRHuzvf+vIr1O8p5YNpYhvTqHHZIEpJEvvinAe+b2S/M7LRkByQi4Xrqnc3MWbqVez4+gotO0WR4qazRBBEsK3om8AEw08zeMrPbzaxb0qMTkRa1bPNefvTSGi44uS9fuXhE2OFIyBJqOnL3fcBsYBbRab8/Ayw1s7sbKmdmk81svZltMLN76znnQjNbbmZrzOy1mP2FZrYqOJaf8DsSkWOye38lX3pqKf27Z/LgtLGaKVUaHAcBgJldDtwGnAg8AYx3951m1hlYB/ymnnLpwMPAJUARsNjMXnT3tTHn9AB+C0x2981mVrc+e5G772r62xKRpqiNOPfMWsbuA1XMuXMiPTp3DDskaQUaTRDA1cCv3P312J3uftDMbmug3Hhgg7tvBDCzWUQH362NOed6YI67bw6uubMpwYtI87h/wXoWbdjNLz57BqMGZ4cdjrQSiTQx/QD45+ENM8sys1wAd/9bA+UGA1titouCfbFOBnqa2T/MbImZxc4a68CCYP/tCcQpIsdgwZrt/PYfHzDt7CFco8FwEiORGsSfgIkx27XBvrMbKRevAbPOMiBkAGcBFwNZwFtm9nYwk+wkdy8Omp3+Ymbv1q3FAATJ43aAoUO1gIhIUxTsOsA3nl3B6MHZ/PDTp4cdjrQyidQgMtw9dsGgKiCRBsoiIPbnSA5QHOecee5+IOhreB0YE7xOcfB3J/A80Saro7j7I+6e5+55ffv2TSAsEQE4WFXDnU8uIT3d+O0N4zQYTo6SSIIoMbNPH94ws6lAIh3Hi4ERZjbczDoSHU9Rd3bYF4DzzSwj6PQ+B1hnZl0O30ZrZl2ATwKrE3hNEUmAu/O951ezfkc5D047U4PhJK5EmpjuAJ4ys4eINhttIYEV5ty9xszuAuYD6cAMd19jZncEx6e7+zozmwesBCLAo+6+2sxOAJ4P5n7JAJ5293nH8P5EJI4n3t7E88u28vVLTuaCk1XzlvjM664OXt+JZl2D88uTG9Kxy8vL8/x8DZkQacjSzXu59n/f4vwRfXn05jyNd0hxZrbE3fPiHUukBoGZ/QtwOpB5eEZHd/+PZotQRFrErv2VfOnJpQzIzuRX12gwnDQskYFy04HOwEXAo8BVxNz2KiJtQ01thLufXsbeg1XMvnMi2Z07hB2StHKJdFJPdPebgb3u/iNgAkfenSQibcAvF7zHWxt3859XjNJgOElIIgmiIvh70MwGAdXA8OSFJCLNbd7q7Ux/7QOuP2coV+fp950kJpE+iJeCOZPuA5YSHez2u2QGJSLNZ2PJfr75pxWMycnmB5ePDDscaUMaTBDBQkF/c/dSYLaZvQxkuntZSwQnIsfnYFUNdzy5hA7pxm9vPItOGRoMJ4lrsInJ3SPA/THblUoOIm2Du3Pv7FW8v3M/v77uTAb3yAo7JGljEumDWGBmnzWtWC7Spjz+ZiEvrijmG5eczPkjNBhOmi6RPoivA12AGjOrIDqa2t29e1IjE5FjtmTTHv7zlXV84rR+fOnCk8IOR9qoRhOEu2tpUZE2pKQ8ujLc4J5Z3K/BcHIcEhko97F4++NNvS0i4aqpjXDX00spO1TNzFvGk52lwXBy7BJpYvpWzPNMotNuLwE+npSIROSY/WL+et4p2MP9V49h5CC1AsvxSaSJ6fLYbTMbAvwiaRGJyDF5ddU2Hnl9IzeeO5TPnpUTdjjSDiRyF1NdRcCo5g5ERI7dhp37+dZzKxkzpAf/fpkGw0nzSKQP4jd8tFRoGjAWWJHEmESkCQ5URgfDdcxI439uGKfBcNJsEumDiF1goQZ4xt0XJSkeEWkCd+c7s1eysWQ/T3z+HAZpMJw0o0QSxHNAhbvXAphZupl1dveDyQ1NRBozc1EhL6/cxrcnn8Kkk/qEHY60M4n0QfwNiP1ZkgX8NTnhiEiiFhfu4adz13HJyP7cecGJYYcj7VAiCSLT3fcf3giea4VzkRDt3FfBl55aSk7PLO6/ZgyaCUeSIZEEccDMxh3eMLOzgEPJC0lEGlJdG+Gup5dRXlHN9JvOonumBsNJciTSB/FV4E9mVhxsDwSuTVpEItKgn7/6Lv8s3MMD147l1AEaDCfJ02gNwt0XA6cCdwJfAk5z9yWJXNzMJpvZejPbYGb31nPOhWa23MzWmNlrTSkrkmpeWbmNRxcW8LkJw7jizMFhhyPtXKMJwsy+DHRx99XuvgroamZfSqBcOvAwMAUYCVxnZiPrnNMD+C3waXc/Hbg60bIiqWbDznK+9dwKxg3twff+Rf8dJPkS6YP4QrCiHADuvhf4QgLlxgMb3H2ju1cBs4Cpdc65Hpjj7puDa+9sQlmRlLG/soYvPrGErA7pPHzDODpmHMskCCJNk8i/srTYxYKCX/cdEyg3GNgSs10U7It1MtDTzP5hZkvM7OYmlD0cz+1mlm9m+SUlJQmEJdK2rCwq5YtP5FOw6wC/uf5MBmZrMJy0jEQ6qecDz5rZdKJTbtwBzEugXLz77rzOdgZwFnAx0fEVb5nZ2wmWje50fwR4BCAvLy/uOSJtTU1thPlrdjBzUQH5m/bSpWM6P75iFBNP1GA4aTmJJIjvALcT7aQ2YAHwuwTKFQFDYrZzgOI45+xy9wNEb6d9HRiTYFmRdqf0YBWzFm/hD28WUlxWwZBeWfz7ZSO5Oi9Ht7NKi0tkuu8IMD14YGbnAb8BvtxI0cXACDMbDmwFphHtc4j1AvCQmWUQbbY6B/gV8G4CZaUdc3cOVtXSpVMiv2Havvd3lDPzzULmLC2iojrChBN688NPn87Fp/UnXSvCSUgS+t9nZmOB64iOfygA5jRWxt1rzOwuok1U6cAMd19jZncEx6e7+zozmwesBCLAo+6+OnjNo8o29c1J2/Wjl9byh7cKOWd4by4dPYBPnT6Aft0zww6rWUUizmvvlzBjYQFvvL+LjhlpXDF2ELdOGs5pAzW+QcJn7vGb7c3sZKK/3K8DdgN/BL7p7sNaLrymycvL8/z8/MZPlFZt3upt3PHkUs4f0Yfi0kN8UHIAMzh7WC+mjB7A5FED2nRH7YHKGmYvLeKxRYVs3HWAft06cfOEYVw3fii9u3YKOzxJMWa2xN3z4h5rIEFEgDeAz7v7hmDfRnc/IWmRHicliLavaO9BLn3wDXL7dOG5OybSMSON93eUM3fVdl5dvY13t5cDMG5oDy4dPZDJowaQ07NtTA22Zc9B/vBWIbMWb6G8ooYxOdncdt5wpowaqNtWJTTHmiA+Q7QGMZHoXUuziDYBDU9WoMdLCaJtq6mNMO2Rt3l3ezmv3HMew3p3OeqcD0r2M2/1duau2saa4n0AjMnJZsrogUwZNSBumTC5O/8s2MPMRYUsWLsdM2PKqAHcOmk444b20CR7ErpjShAxhbsAVxBtavo48DjwvLsvaOY4j5sSRNt2/4L1/ObvG3hw2limjm18GolNuw/w6urtvLpqGyuKygA4fVD3D2sWJ/btmuyQ61VRXctLK4qZuaiQtdv20aNzB64bP5Sbzh2mRX2kVTmuBFHnQr2ITodxrbt/vJniazZKEG3Xmx/s4oZH3+GqcTncd/WYJpcv2nvww5rF0s2lAJzSvxtTRg/g0tEDGdGva4v8Wt9ZXsGTb2/m6Xc2sWt/FSP6deXWScP5zJmDyeqopUCl9Wm2BNHaKUG0Tbv3VzLlwTfompnBy3efR+eOx3dr67ayQ8xfvZ25q7ezuHAP7nBi3y5cOnogU0YN5LSB3Zo9WawqKmPmogJeWllMda3z8VP7ceukXM47qY+akaRVU4KQVsvd+fzj+Sx8fxfPf3kipw/Kbtbr7yyvYP6aHby6ahtvb9xNxCG3d2emjB7IpaMGMmpw92P+Aq+pjbBgbXS08+LCvXTumM41eUP43MRchvdpXX0hIvVRgpBW6/cLC/jxy2v50adP53MTc5P6Wrv3V7Jg7Q7mrtrGmx/spjbi5PTMCmoWAxg7JLFO47KD1cxavJk/vLWJraWHyOmZxS0Tc7nm7CEa7SxtjhKEtEqrisq48n8WceEp/XjkprNatClm74Eq/rIuWrNYuGEX1bXOoOxMJo8ayJTRAzhraE/S6oxg3rCznJmLCpmzdCuHqms594Re3DppOJ/QaGdpw5QgpNXZX1nDZb9+g8qaCHPvOZ+eXRKZIDg5yg5V87d1O5i7ajuvv19CVU2Eft06MXnUAKaMGkhFTS0zFxXy+nsldMxIY+qYQdwyKbfZm8NEwqAEIa3O1/+4nD8v38ozXziXc07oHXY4HyqvqObv7+7k1VXb+b/1O6msiQDQt1snbjp3GNefM5Q+Gu0s7UhDCSI1ZkKTVmX2kiLmLNvKVz8xolUlB4BumR2YOnYwU8cO5kBlDa+9V4I7XDKyv0Y7S8pRgpAWtbFkP//+wmrGD+/F3R8fEXY4DerSKYNLRw8MOwyR0OgnkbSYyppa7n5mGR0z0nhw2lh17Iq0cqpBSIv5+avrWVO8j9/dnNemZ2MVSRWqQUiL+Nu6HcxYVMAtE3O5ZGT/sMMRkQQoQUjSbS+r4Jt/WsFpA7tz75RTww5HRBKkBCFJVRtxvvrHZVTWRHjo+jPJ7KAJ60TaCvVBSFI9/H8beHvjHu676oxQp98WkaZTDUKSZnHhHh7463tMHTuIq87KCTscEWkiJQhJitKDVXzlmWUM6dWZ/7xilKa8FmmD1MQkzc7d+c7slZTsr2T2nRPpphlORdqkpNYgzGyyma03sw1mdm+c4xeaWZmZLQ8e3485Vmhmq4L9mmCpDXny7U3MX7ODb3/qVM7I6RF2OCJyjJJWgzCzdOBh4BKgCFhsZi+6+9o6p77h7pfVc5mL3H1XsmKU5rdu2z5+/Mo6Lji5L58/b3jY4YjIcUhmDWI8sMHdN7p7FTALmJrE15OQHayq4e5nlpGd1YH7rxlz1HoKItK2JDNBDAa2xGwXBfvqmmBmK8zsVTM7PWa/AwvMbImZ3V7fi5jZ7WaWb2b5JSUlzRO5HJMfvbiWD0r288C1YzUltkg7kMxO6ng/H+suPrEUGObu+83sUuDPwOEpPie5e7GZ9QP+YmbvuvvrR13Q/RHgEYiuB9Fs0UuTvLSimD/mb+FLF57IpJP6hB2OiDSDZNYgioAhMds5QHHsCe6+z933B8/nAh3MrE+wXRz83Qk8T7TJSlqhzbsP8t05qxg3tAdfu+TksMMRkWaSzASxGBhhZsPNrCMwDXgx9gQzG2DBDfJmNj6IZ7eZdTGzbsH+LsAngdVJjFWOUXVthLtnLQODB6edSYd0Da0RaS+S1sTk7jVmdhcwH0gHZrj7GjO7Izg+HbgKuNPMaoBDwDR3dzPrDzwf5I4M4Gl3n5esWOXY/XLBelZsKeW3N4xjSK/OYYcjIs0oqQPlgmajuXX2TY95/hDwUJxyG4ExyYxNjt/r75Xwv69t5PpzhmrlNZF2SO0Bckx2llfw9WeXc3L/rnz/spFhhyMiSaCpNqTJIhHnG8+uoLyihqe/cK6m8BZpp1SDkCZ75I2NvPH+Ln5w+emc3L9b2OGISJIoQUiTLNu8l1/OX8+/jB7IdeOHNF5ARNosJQhJ2L6Kau5+Zhn9u2fy0ytHawpvkXZOfRCSEHfnu3NWsa2sgme/OIHsLE3hLdLeqQYhCXk2fwsvr9zG1y85mbOG9Qw7HBFpAUoQ0qgNO8v5wYtrmHRSb+684MSwwxGRFqIEIQ2qqK7lrqeX0aVjBr+6Zqym8BZJIeqDkAb95JV1vLu9nJm3nk2/7plhhyMiLUg1CKnXvNXbeeLtTXzh/OFcdEq/sMMRkRamBCFxbS09xLefW8EZOdl861Onhh2OiIRACUKOUlMb4SvPLCPi8OtpZ9IxQ/9MRFKR+iDkKL/+2/vkb9rLg9PGktunS9jhiEhIlCBake1lFew9WEVNrVNVG6GmNkJ1rVNdGwkeTk0kQlVNhJqIf7ivujZCdU2E6mBfvHKHn3907WBfxKNla6PXrKqJUFx2iKvOymHq2HhLiItIqlCCaAUOVNbwi3nv8vhbm477Wh3T08hINzqkp9Eh+Ht4+4hjaWl06pBG1/Q0MtLS6JhhZKSl0SE9jX7dO3HXRSc1wzsTkbZMCSJkb27YxXfmrKRo7yE+N2EY557Q+8Mv9egX+kdf9B3iPM+I+eLPSDPNjyQizUYJIiTlFdX816vv8vQ7mxnepwvPfnECZ+f2CjssEZEPKUGE4LX3Svi32SvZvq+CL5w/nK9fcgpZHbXojoi0LkoQLajsUDU/eWUtz+YXcWLfLjx350TGDdXEdyLSOiX1Bnczm2xm681sg5ndG+f4hWZWZmbLg8f3Ey3b1vxt3Q4++avXmL10K3deeCKv3HO+koOItGpJq0GYWTrwMHAJUAQsNrMX3X1tnVPfcPfLjrFsq1d6sIofvbSW55dt5ZT+3fjdzXmckdMj7LBERBqVzCam8cAGd98IYGazgKlAIl/yx1O21Zi3ejv/78+rKT1YxT0Xj+Cui07SqGQRaTOSmSAGA1titouAc+KcN8HMVgDFwDfdfU0TyrZKu/dX8oMX1/Dyym2MHNidx287m9MHZYcdlohIkyQzQcS7Id/rbC8Fhrn7fjO7FPgzMCLBstEXMbsduB1g6NChxxxsc3ll5Ta+/8Jq9lVU8/VLTubOC0+kQ7pqDSLS9iQzQRQBQ2K2c4jWEj7k7vtins81s9+aWZ9EysaUewR4BCAvLy9uEmkJJeWVfP+F1by6ejtn5GTz1FXncOqA7mGFIyJy3JKZIBYDI8xsOLAVmAZcH3uCmQ0Adri7m9l4ondV7QZKGyvbWrg7Lywv5ocvreFgVS3fmXwqXzh/OBmqNYhIG5e0BOHuNWZ2FzAfSAdmuPsaM7sjOD4duAq408xqgEPANHd3IG7ZZMV6rHbsq+B7z6/ir+t2cubQHtx31Rmc1K9b2GGJiDQLi34ftw95eXmen5+f9Ndxd55bUsSPX15LZU2Eb37yFG47bzjpWq9ZRNoYM1vi7nnxjmkkdRMVlx7iu8+v4h/rSzg7tyc//+wZnNC3a9hhiYg0OyWIBLk7sxZv4SevrKM24vzw8pHcPCGXNNUaRKSdUoJIwJY9B/m3OatYuGEXE07ozc8/ewZDe3cOOywRkaRSgmhAJOI89c4mfvbquwD85xWjuH78UNUaRCQlKEHUY9PuA3xn9kre3riH80f04b+uHE1OT9UaRCR1KEHUEYk4j71ZyH3z15ORZvzsytFce/YQrdQmIilHCSLGxpL9fPu5leRv2stFp/Tlp1eOZmB2VthhiYiEQgkCqI04v1+4kfsXvEenjDTuv3oMV44brFqDiKS0lE8QZQer+dzMf7J8SymfOK0/P/3MKPp1zww7LBGR0KV8guielcGw3p25dVIunx4zSLUGEZFAyicIM+PBaWeGHYaISKujKUdFRCQuJQgREYlLCUJEROJSghARkbiUIEREJC4lCBERiUsJQkRE4lKCEBGRuNrVmtRmVgJsOsbifYBdzRhOW6bP4kj6PI6kz+Mj7eGzGObufeMdaFcJ4niYWX59C3enGn0WR9LncSR9Hh9p75+FmphERCQuJQgREYlLCeIjj4QdQCuiz+JI+jyOpM/jI+36s1AfhIiIxKUahIiIxKUEISIicaV8gjCzyWa23sw2mNm9YccTJjMbYmb/Z2brzGyNmX0l7JjCZmbpZrbMzF4OO5awmVkPM3vOzN4N/o1MCDumMJnZ14L/J6vN7Bkza3drFad0gjCzdOBhYAowErjOzEaGG1WoaoBvuPtpwLnAl1P88wD4CrAu7CBaiQeBee5+KjCGFP5czGwwcA+Q5+6jgHRgWrhRNb+UThDAeGCDu2909ypgFjA15JhC4+7b3H1p8Lyc6BfA4HCjCo+Z5QD/AjwadixhM7PuwMeA3wO4e5W7l4YaVPgygCwzywA6A8Uhx9PsUj1BDAa2xGwXkcJfiLHMLBc4E3gn5FDC9ADwbSASchytwQlACTAzaHJ71My6hB1UWNx9K/BLYDOwDShz9wXhRtX8Uj1BWJx9KX/fr5l1BWYDX3X3fWHHEwYzuwzY6e5Lwo6llcgAxgH/4+5nAgeAlO2zM7OeRFsbhgODgC5mdmO4UTW/VE8QRcCQmO0c2mE1sSnMrAPR5PCUu88JO54QTQI+bWaFRJseP25mT4YbUqiKgCJ3P1yjfI5owkhVnwAK3L3E3auBOcDEkGNqdqmeIBYDI8xsuJl1JNrJ9GLIMYXGzIxoG/M6d//vsOMJk7v/m7vnuHsu0X8Xf3f3dvcLMVHuvh3YYmanBLsuBtaGGFLYNgPnmlnn4P/NxbTDTvuMsAMIk7vXmNldwHyidyHMcPc1IYcVpknATcAqM1se7Puuu88NLyRpRe4Gngp+TG0Ebg05ntC4+ztm9hywlOjdf8toh9NuaKoNERGJK9WbmEREpB5KECIiEpcShIiIxKUEISIicSlBiIhIXEoQIgEz2x/8zTWz65v52t+ts/1mc15fJBmUIESOlgs0KUEEMwM35IgE4e7tbtSttD9KECJH+xlwvpktD+b8Tzez+8xssZmtNLMvApjZhcH6GU8Dq4J9fzazJcE6AbcH+35GdNbP5Wb2VLDvcG3FgmuvNrNVZnZtzLX/EbP+wlPBiF3M7GdmtjaI5Zct/ulIykjpkdQi9bgX+Ka7XwYQfNGXufvZZtYJWGRmh2fuHA+McveCYPs2d99jZlnAYjOb7e73mtld7j42zmtdCYwlur5Cn6DM68GxM4HTic4PtgiYZGZrgc8Ap7q7m1mP5n3rIh9RDUKkcZ8Ebg6mH3kH6A2MCI79MyY5ANxjZiuAt4lOBDmChp0HPOPute6+A3gNODvm2kXuHgGWE2362gdUAI+a2ZXAweN8byL1UoIQaZwBd7v72OAxPGbu/wMfnmR2IdFZPie4+xii8/M0tgxlvCnnD6uMeV4LZLh7DdFay2zgCmBeE96HSJMoQYgcrRzoFrM9H7gzmAodMzu5nsVysoG97n7QzE4lumzrYdWHy9fxOnBt0M/Rl+iqbf+sL7BgrY7sYALFrxJtnhJJCvVBiBxtJVATNBU9RnQt5lxgadBRXEL013td84A7zGwlsJ5oM9NhjwArzWypu98Qs/95YAKwguhiVd929+1BgomnG/CCmWUSrX187ZjeoUgCNJuriIjEpSYmERGJSwlCRETiUoIQEZG4lCBERCQuJQgREYlLCUJEROJSghARkbj+P2aNBHvv68ZiAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -1136,7 +511,7 @@ { "data": { "text/plain": [ - "0.8088835446727882" + "0.8091021716950881" ] }, "execution_count": 16, @@ -1337,377 +712,10 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "CybSecMLPForExport(\n", - " (pretrained): Sequential(\n", - " (0): QuantLinear(\n", - " in_features=593, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): Dropout(p=0.5, inplace=False)\n", - " (3): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (4): QuantLinear(\n", - " in_features=64, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (5): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (6): Dropout(p=0.5, inplace=False)\n", - " (7): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (8): QuantLinear(\n", - " in_features=64, out_features=64, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " (9): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (10): Dropout(p=0.5, inplace=False)\n", - " (11): QuantReLU(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): ReLU()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClamp()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " )\n", - " )\n", - " (12): QuantLinear(\n", - " in_features=64, out_features=1, bias=True\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (output_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (weight_quant): WeightQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (tensor_quant): RescalingIntQuant(\n", - " (int_quant): IntQuant(\n", - " (float_to_int_impl): RoundSte()\n", - " (tensor_clamp_impl): TensorClampSte()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " )\n", - " (scaling_impl): StatsFromParameterScaling(\n", - " (parameter_list_stats): _ParameterListStats(\n", - " (first_tracked_param): _ViewParameterWrapper(\n", - " (view_shape_impl): OverTensorView()\n", - " )\n", - " (stats): _Stats(\n", - " (stats_impl): AbsMax()\n", - " )\n", - " )\n", - " (stats_scaling_impl): _StatsScaling(\n", - " (affine_rescaling): Identity()\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_scaling_pre): Identity()\n", - " )\n", - " )\n", - " (int_scaling_impl): IntScaling()\n", - " (zero_point_impl): ZeroZeroPoint(\n", - " (zero_point): StatelessBuffer()\n", - " )\n", - " (msb_clamp_bit_width_impl): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (bias_quant): BiasQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " )\n", - " )\n", - " (qnt_output): QuantIdentity(\n", - " (input_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " )\n", - " (act_quant): ActQuantProxyFromInjector(\n", - " (_zero_hw_sentinel): StatelessBuffer()\n", - " (fused_activation_quant_proxy): FusedActivationQuantProxy(\n", - " (activation_impl): Identity()\n", - " (tensor_quant): ClampedBinaryQuant(\n", - " (scaling_impl): ParameterFromRuntimeStatsScaling(\n", - " (stats_input_view_shape_impl): OverTensorView()\n", - " (stats): _Stats(\n", - " (stats_impl): AbsPercentile()\n", - " )\n", - " (restrict_clamp_scaling): _RestrictClampValue(\n", - " (clamp_min_ste): ScalarClampMinSte()\n", - " (restrict_value_impl): FloatRestrictValue()\n", - " )\n", - " (restrict_inplace_preprocess): Identity()\n", - " (restrict_preprocess): Identity()\n", - " )\n", - " (bit_width): BitWidthConst(\n", - " (bit_width): StatelessBuffer()\n", - " )\n", - " (zero_point): StatelessBuffer()\n", - " (delay_wrapper): DelayWrapper(\n", - " (delay_impl): _NoDelay()\n", - " )\n", - " (tensor_clamp_impl): TensorClamp()\n", - " )\n", - " )\n", - " )\n", - " )\n", - ")" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "from brevitas.core.quant import QuantType\n", "from brevitas.nn import QuantIdentity\n", "\n", "\n", @@ -1715,7 +723,10 @@ " def __init__(self, my_pretrained_model):\n", " super(CybSecMLPForExport, self).__init__()\n", " self.pretrained = my_pretrained_model\n", - " self.qnt_output = QuantIdentity(quant_type=QuantType.BINARY, bit_width=1, min_val=-1.0, max_val=1.0)\n", + " self.qnt_output = QuantIdentity(\n", + " quant_type='binary', \n", + " scaling_impl_type='const',\n", + " bit_width=1, min_val=-1.0, max_val=1.0)\n", " \n", " def forward(self, x):\n", " # assume x contains bipolar {-1,1} elems\n", -- GitLab