oc-p11-bigdata-fruits/P11_01_notebook.ipynb
2025-11-10 18:29:52 +01:00

1 line
No EOL
466 KiB
Text

{"cells": [{"metadata": {"id": "441159cc"}, "id": "441159cc", "cell_type": "markdown", "source": "# D\u00e9ployez un mod\u00e8le dans le cloud\n\n\n# Sommaire :\n\n**1. Pr\u00e9ambule**<br />\n&emsp;1.1 Probl\u00e9matique<br />\n&emsp;1.2 Objectifs dans ce projet<br />\n&emsp;1.3 D\u00e9roulement des \u00e9tapes du projet<br />\n**2. Choix techniques g\u00e9n\u00e9raux retenus**<br />\n&emsp;2.1 Calcul distribu\u00e9<br />\n&emsp;2.2 Transfert Learning<br />\n**3. D\u00e9ploiement de la solution en local**<br />\n&emsp;3.1 Environnement de travail<br />\n&emsp;3.2 Installation de Spark<br />\n&emsp;3.3 Installation des packages<br />\n&emsp;3.4 Import des librairies<br />\n&emsp;3.5 D\u00e9finition des PATH pour charger les images et enregistrer les r\u00e9sultats<br />\n&emsp;3.6 Cr\u00e9ation de la SparkSession<br />\n&emsp;3.7 Traitement des donn\u00e9es<br />\n&emsp;&emsp;3.7.1 Chargement des donn\u00e9es<br />\n&emsp;&emsp;3.7.2 Pr\u00e9paration du mod\u00e8le<br />\n&emsp;&emsp;3.7.3 D\u00e9finition du processus de chargement des images et application <br />\n&emsp;&emsp;&emsp;&emsp;&emsp;de leur featurisation \u00e0 travers l'utilisation de pandas UDF<br />\n&emsp;&emsp;3.7.4 Ex\u00e9cution des actions d'extractions de features<br />\n&emsp;3.8 Chargement des donn\u00e9es enregistr\u00e9es et validation du r\u00e9sultat<br />\n**4. D\u00e9ploiement de la solution sur le cloud**<br />\n&emsp;4.1 Choix du prestataire cloud : AWS<br />\n&emsp;4.2 Choix de la solution technique : EMR<br />\n&emsp;4.3 Choix de la solution de stockage des donn\u00e9es : Amazon S3<br />\n&emsp;4.4 Configuration de l'environnement de travail<br />\n&emsp;4.5 Upload de nos donn\u00e9es sur S3<br />\n&emsp;4.6 Configuration du serveur EMR<br />\n&emsp;&emsp;4.6.1 \u00c9tape 1 : Logiciels et \u00e9tapes<br />\n&emsp;&emsp;&emsp;4.6.1.1 Configuration des logiciels<br />\n&emsp;&emsp;&emsp;4.6.1.2 Modifier les param\u00e8tres du logiciel<br />\n&emsp;&emsp;4.6.2 \u00c9tape 2 : Mat\u00e9riel<br />\n&emsp;&emsp;4.6.3 \u00c9tape 3 : Param\u00e8tres de cluster g\u00e9n\u00e9raux<br />\n&emsp;&emsp;&emsp;4.6.3.1 Options g\u00e9n\u00e9rales<br />\n&emsp;&emsp;&emsp;4.6.3.2 Actions d'amor\u00e7age<br />\n&emsp;&emsp;4.6.4 \u00c9tape 4 : S\u00e9curit\u00e9<br />\n&emsp;&emsp;&emsp;4.6.4.1 Options de s\u00e9curit\u00e9<br />\n&emsp;4.7 Instanciation du serveur<br />\n&emsp;4.8 Cr\u00e9ation du tunnel SSH \u00e0 l'instance EC2 (Ma\u00eetre)<br />\n&emsp;&emsp;4.8.1 Cr\u00e9ation des autorisations sur les connexions entrantes<br />\n&emsp;&emsp;4.8.2 Cr\u00e9ation du tunnel ssh vers le Driver<br />\n&emsp;&emsp;4.8.3 Configuration de FoxyProxy<br />\n&emsp;&emsp;4.8.4 Acc\u00e8s aux applications du serveur EMR via le tunnel ssh<br />\n&emsp;4.9 Connexion au notebook JupyterHub<br />\n&emsp;4.10 Ex\u00e9cution du code<br />\n&emsp;&emsp;4.10.1 D\u00e9marrage de la session Spark<br />\n&emsp;&emsp;4.10.2 Installation des packages<br />\n&emsp;&emsp;4.10.3 Import des librairies<br />\n&emsp;&emsp;4.10.4 D\u00e9finition des PATH pour charger les images et enregistrer les r\u00e9sultats<br />\n&emsp;&emsp;4.10.5 Traitement des donn\u00e9es<br />\n&emsp;&emsp;&emsp;4.10.5.1 Chargement des donn\u00e9es<br />\n&emsp;&emsp;&emsp;4.10.5.2 Pr\u00e9paration du mod\u00e8le<br />\n&emsp;&emsp;&emsp;4.10.5.3 D\u00e9finition du processus de chargement des images<br />\n&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;et application de leur featurisation \u00e0 travers l'utilisation de pandas UDF<br />\n&emsp;&emsp;&emsp;4.10.5.4 Ex\u00e9cutions des actions d'extractions de features<br />\n&emsp;&emsp;4.10.6 Chargement des donn\u00e9es enregistr\u00e9es et validation du r\u00e9sultat<br />\n&emsp;4.11 Suivi de l'avancement des t\u00e2ches avec le Serveur d'Historique Spark<br />\n&emsp;4.12 R\u00e9siliation de l'instance EMR<br />\n&emsp;4.13 Cloner le serveur EMR (si besoin)<br />\n&emsp;4.14 Arborescence du serveur S3 \u00e0 la fin du projet<br />\n**5. Conclusion**"}, {"metadata": {"id": "ec2cee08"}, "id": "ec2cee08", "cell_type": "markdown", "source": "# 1. Pr\u00e9ambule"}, {"metadata": {"id": "XMINEX1KDEZ1"}, "id": "XMINEX1KDEZ1", "cell_type": "markdown", "source": "## 1.1 Probl\u00e9matique\n\nLa tr\u00e8s jeune start-up de l'AgriTech, nomm\u00e9e \"**Fruits**!\", <br />\ncherche \u00e0 proposer des solutions innovantes pour la r\u00e9colte des fruits.\n\nLa volont\u00e9 de l\u2019entreprise est de pr\u00e9server la biodiversit\u00e9 des fruits <br />\nen permettant des traitements sp\u00e9cifiques pour chaque esp\u00e8ce de fruits <br />\nen d\u00e9veloppant des robots cueilleurs intelligents.\n\nLa start-up souhaite dans un premier temps se faire conna\u00eetre en mettant <br />\n\u00e0 disposition du grand public une application mobile qui permettrait aux <br />\nutilisateurs de prendre en photo un fruit et d'obtenir des informations sur ce fruit.\n\nPour la start-up, cette application permettrait de sensibiliser le grand public <br />\n\u00e0 la biodiversit\u00e9 des fruits et de mettre en place une premi\u00e8re version du moteur <br />\nde classification des images de fruits.\n\nDe plus, le d\u00e9veloppement de l\u2019application mobile permettra de construire <br />\nune premi\u00e8re version de l'architecture **Big Data** n\u00e9cessaire."}, {"metadata": {"id": "53_ir7SODIQt"}, "id": "53_ir7SODIQt", "cell_type": "markdown", "source": "## 1.2 Objectifs dans ce projet\n\n1. D\u00e9velopper une premi\u00e8re cha\u00eene de traitement des donn\u00e9es qui <br />\n comprendra le **preprocessing** et une \u00e9tape de **r\u00e9duction de dimension**.\n2. Tenir compte du fait que <u>le volume de donn\u00e9es va augmenter <br />\n tr\u00e8s rapidement</u> apr\u00e8s la livraison de ce projet, ce qui implique de:\n - D\u00e9ployer le traitement des donn\u00e9es dans un environnement **Big Data**\n - D\u00e9velopper les scripts en **pyspark** pour effectuer du **calcul distribu\u00e9**"}, {"metadata": {"id": "6b95e6ce"}, "id": "6b95e6ce", "cell_type": "markdown", "source": "## 1.3 D\u00e9roulement des \u00e9tapes du projet\n\nLe projet va \u00eatre r\u00e9alis\u00e9 en 2 temps, dans deux environnements diff\u00e9rents. <br />\nNous allons dans un premier temps d\u00e9velopper et ex\u00e9cuter notre code en local, <br />\nen travaillant sur un nombre limit\u00e9 d'images \u00e0 traiter.\n\nUne fois les choix techniques valid\u00e9s, nous d\u00e9ploierons notre solution <br />\ndans un environnement Big Data en mode distribu\u00e9.\n\n<u>Pour cette raison, ce projet sera divis\u00e9 en 3 parties</u>:\n1. Liste des choix techniques g\u00e9n\u00e9raux retenus\n2. D\u00e9ploiement de la solution en local\n3. D\u00e9ploiement de la solution dans le cloud"}, {"metadata": {"id": "f5b34029"}, "id": "f5b34029", "cell_type": "markdown", "source": "# 2. Choix techniques g\u00e9n\u00e9raux retenus"}, {"metadata": {"id": "32baf092"}, "id": "32baf092", "cell_type": "markdown", "source": "## 2.1 Calcul distribu\u00e9\n\nL\u2019\u00e9nonc\u00e9 du projet nous impose de d\u00e9velopper des scripts en **pyspark** <br />\nafin de <u>prendre en compte l\u2019augmentation tr\u00e8s rapide du volume <br />\nde donn\u00e9 apr\u00e8s la livraison du projet</u>.\n\nPour comprendre rapidement et simplement ce qu\u2019est **pyspark** <br />\net son principe de fonctionnement, nous vous conseillons de lire <br />\ncet article : [PySpark : Tout savoir sur la librairie Python](https://datascientest.com/pyspark)\n\n<u>Le d\u00e9but de l\u2019article nous dit ceci </u>:<br />\n\u00ab *Lorsque l\u2019on parle de traitement de bases de donn\u00e9es sur python, <br />\non pense imm\u00e9diatement \u00e0 la librairie pandas. Cependant, lorsqu\u2019on a <br />\naffaire \u00e0 des bases de donn\u00e9es trop massives, les calculs deviennent trop lents.<br />\nHeureusement, il existe une autre librairie python, assez proche <br />\nde pandas, qui permet de traiter des tr\u00e8s grandes quantit\u00e9s de donn\u00e9es : PySpark.<br />\nApache Spark est un framework open-source d\u00e9velopp\u00e9 par l\u2019AMPLab <br />\nde UC Berkeley permettant de traiter des bases de donn\u00e9es massives <br />\nen utilisant le calcul distribu\u00e9, technique qui consiste \u00e0 exploiter <br />\nplusieurs unit\u00e9s de calcul r\u00e9parties en clusters au profit d\u2019un seul <br />\nprojet afin de diviser le temps d\u2019ex\u00e9cution d\u2019une requ\u00eate.<br />\nSpark a \u00e9t\u00e9 d\u00e9velopp\u00e9 en Scala et est au meilleur de ses capacit\u00e9s <br />\ndans son langage natif. Cependant, la librairie PySpark propose de <br />\nl\u2019utiliser avec le langage Python, en gardant des performances <br />\nsimilaires \u00e0 des impl\u00e9mentations en Scala.<br />\nPyspark est donc une bonne alternative \u00e0 la librairie pandas lorsqu\u2019on <br />\ncherche \u00e0 traiter des jeux de donn\u00e9es trop volumineux qui entra\u00eenent <br />\ndes calculs trop chronophages.* \u00bb\n\nComme nous le constatons, **pySpark** est un moyen de communiquer <br />\navec **Spark** via le langage **Python**.<br />\n**Spark**, quant \u00e0 lui, est un outil qui permet de g\u00e9rer et de coordonner <br />\nl'ex\u00e9cution de t\u00e2ches sur des donn\u00e9es \u00e0 travers un groupe d'ordinateurs. <br />\n<u>Spark (ou Apache Spark) est un framework open source de calcul distribu\u00e9 <br />\nin-memory pour le traitement et l'analyse de donn\u00e9es massives</u>.\n\nUn autre [article tr\u00e8s int\u00e9ressant et beaucoup plus complet pour <br />\ncomprendre le **fonctionnement de Spark**](https://www.veonum.com/apache-spark-pour-les-nuls/), ainsi que le r\u00f4le <br />\ndes **Spark Session** que nous utiliserons dans ce projet.\n\n<u>Voici \u00e9galement un extrait</u>:\n\n*Les applications Spark se composent d\u2019un pilote (\u00ab\u202fdriver process\u202f\u00bb) <br />\net de plusieurs ex\u00e9cuteurs (\u00ab\u202fexecutor processes\u202f\u00bb). Il peut \u00eatre configur\u00e9 <br />\npour \u00eatre lui-m\u00eame l\u2019ex\u00e9cuteur (local mode) ou en utiliser autant que <br />\nn\u00e9cessaire pour traiter l\u2019application, Spark prenant en charge la mise <br />\n\u00e0 l\u2019\u00e9chelle automatique par une configuration d\u2019un nombre minimum <br />\net maximum d\u2019ex\u00e9cuteurs.*\n\n![Sch\u00e9ma de Spark](img/spark-schema.png)\n\n*Le driver (parfois appel\u00e9 \u00ab\u202fSpark Session\u202f\u00bb) distribue et planifie <br />\nles t\u00e2ches entre les diff\u00e9rents ex\u00e9cuteurs qui les ex\u00e9cutent et permettent <br />\nun traitement r\u00e9parti. Il est le responsable de l\u2019ex\u00e9cution du code <br />\nsur les diff\u00e9rentes machines.\n\nChaque ex\u00e9cuteur est un processus Java Virtual Machine (JVM) distinct <br />\ndont il est possible de configurer le nombre de CPU et la quantit\u00e9 de <br />\nm\u00e9moire qui lui est allou\u00e9. <br />\nUne seule t\u00e2che peut traiter un fractionnement de donn\u00e9es \u00e0 la fois.*\n\nDans les deux environnements (Local et Cloud) nous utiliserons donc **Spark** <br />\net nous l\u2019exploiterons \u00e0 travers des scripts python gr\u00e2ce \u00e0 **PySpark**.\n\nDans la <u>version locale</u> de notre script nous **simulerons <br />\nle calcul distribu\u00e9** afin de valider que notre solution fonctionne.<br />\nDans la <u>version cloud</u> nous **r\u00e9aliserons les op\u00e9rations sur un cluster de machine**."}, {"metadata": {"id": "5364c9f9"}, "id": "5364c9f9", "cell_type": "markdown", "source": "## 2.2 Transfert Learning\n\nL'\u00e9nonc\u00e9 du projet nous demande \u00e9galement de <br />\nr\u00e9aliser une premi\u00e8re cha\u00eene de traitement <br />\ndes donn\u00e9es qui comprendra le preprocessing et <br />\nune \u00e9tape de r\u00e9duction de dimension.\n\nIl est \u00e9galement pr\u00e9cis\u00e9 qu'il n'est pas n\u00e9cessaire <br />\nd'entra\u00eener un mod\u00e8le pour le moment.\n\nNous d\u00e9cidons de partir sur une solution de **transfert learning**.\n\nSimplement, le **transfert learning** consiste <br />\n\u00e0 utiliser la connaissance d\u00e9j\u00e0 acquise <br />\npar un mod\u00e8le entra\u00een\u00e9 (ici **MobileNetV2**) pour <br />\nl'adapter \u00e0 notre probl\u00e9matique.\n\nNous allons fournir au mod\u00e8le nos images, et nous allons <br />\n<u>r\u00e9cup\u00e9rer l'avant derni\u00e8re couche</u> du mod\u00e8le.<br />\nEn effet la derni\u00e8re couche de mod\u00e8le est une couche softmax <br />\nqui permet la classification des images ce que nous ne <br />\nsouhaitons pas dans ce projet.\n\nL'avant derni\u00e8re couche correspond \u00e0 un **vecteur <br />\nr\u00e9duit** de dimension (1,1,1280).\n\nCela permettra de r\u00e9aliser une premi\u00e8re version du moteur <br />\npour la classification des images des fruits.\n\n**MobileNetV2** a \u00e9t\u00e9 retenu pour sa <u>rapidit\u00e9 d'ex\u00e9cution</u>, <br />\nparticuli\u00e8rement adapt\u00e9e pour le traitement d'un gros volume <br />\nde donn\u00e9es ainsi que la <u>faible dimensionnalit\u00e9 du vecteur <br />\nde caract\u00e9ristique en sortie</u> (1,1,1280)"}, {"metadata": {"id": "1e89a2da"}, "id": "1e89a2da", "cell_type": "markdown", "source": "# 3. D\u00e9ploiement de la solution en local\n\n\n## 3.1 Environnement de travail\n\nPour des raisons de simplicit\u00e9, nous d\u00e9veloppons dans un environnement <br />\nLinux Unbuntu (ex\u00e9cut\u00e9 depuis une machine Windows dans une machine virtuelle)\n* Pour installer une machine virtuelle : https://www.malekal.com/meilleurs-logiciels-de-machine-virtuelle-gratuits-ou-payants/\n\n## 3.2 Installation de Spark\n\n[La premi\u00e8re \u00e9tape consiste \u00e0 installer Spark ](https://computingforgeeks.com/how-to-install-apache-spark-on-ubuntu-debian/)\n\n## 3.3 Installation des packages\n\n<u>On installe ensuite \u00e0 l'aide de la commande **pip** <br />\nles packages qui nous seront n\u00e9cessaires</u> :"}, {"metadata": {"scrolled": true, "id": "728d9256", "trusted": false}, "id": "728d9256", "cell_type": "code", "source": "!pip install Pandas pillow tensorflow pyspark pyarrow --quiet", "execution_count": 1, "outputs": []}, {"metadata": {"id": "33a43845"}, "id": "33a43845", "cell_type": "markdown", "source": "## 3.4 Import des librairies"}, {"metadata": {"id": "a5c0c74f", "trusted": false}, "id": "a5c0c74f", "cell_type": "code", "source": "import pandas as pd\nfrom PIL import Image\nimport numpy as np\nimport io\nimport os\n\nimport tensorflow as tf\nfrom tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input\nfrom tensorflow.keras.preprocessing.image import img_to_array\nfrom tensorflow.keras import Model\nfrom pyspark.sql.functions import col, pandas_udf, PandasUDFType, element_at, split, udf\nfrom pyspark.sql import SparkSession\nfrom pyspark.ml.feature import PCA\nfrom pyspark.ml.linalg import Vectors, VectorUDT", "execution_count": 2, "outputs": []}, {"metadata": {"id": "661ff67c"}, "id": "661ff67c", "cell_type": "markdown", "source": "## 3.5 D\u00e9finition des PATH pour charger les images <br /> et enregistrer les r\u00e9sultats\n\nDans cette version locale nous partons du principe que les donn\u00e9es <br />\nsont stock\u00e9es dans le m\u00eame r\u00e9pertoire que le notebook.<br />\nNous utilisons les **103 images** du dossier test-multiple_fruits pour valider notre pipeline en local.<br />\nL'extrait des images \u00e0 charger est stock\u00e9e dans le dossier **Test1**.<br />\nNous enregistrerons le r\u00e9sultat de notre traitement <br />\ndans le dossier \"**Results_Local**\""}, {"metadata": {"id": "Pw1Darz5Hzn_", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "b3712c24-c2b7-448c-c1a2-b47b4515bd95", "trusted": false}, "id": "Pw1Darz5Hzn_", "cell_type": "code", "source": "# 1. Montage Google Drive\nfrom google.colab import drive\ndrive.mount('/content/drive')\nimport os\nimport zipfile\n\n# 2. Navigation vers le projet\ndrive_folder = \"/content/drive/MyDrive/Colab_Notebooks/Project_11/\"\nos.chdir(drive_folder)\n\n# 3. Variables PATH adapt\u00e9es pour test-multiple-fruits\nPATH = os.getcwd()\nfruits_folder = 'test-multiple_fruits'\nPATH_Data = PATH + f'/data/{fruits_folder}'\nPATH_Result = PATH + '/data/Results'\n\n# 4. V\u00e9rification si d\u00e9j\u00e0 extrait\nall_extracted = False\nif os.path.exists(PATH_Data):\n existing_files = [f for f in os.listdir(PATH_Data) if f.endswith('.jpg')]\n if len(existing_files) > 0:\n all_extracted = True\n\n# 5. Extraction seulement si n\u00e9cessaire\nif not all_extracted:\n print(\"Extraction des donn\u00e9es test-multiple-fruits en cours...\")\n\n # Nettoyer d'abord le dossier existant\n if os.path.exists(PATH_Data):\n import shutil\n shutil.rmtree(PATH_Data)\n\n os.makedirs('data', exist_ok=True)\n os.makedirs(PATH_Data, exist_ok=True)\n\n with zipfile.ZipFile('fruits.zip', 'r') as zip_ref:\n for file in zip_ref.namelist():\n if f'fruits-360_dataset/fruits-360/{fruits_folder}/' in file and file.endswith('.jpg'):\n zip_ref.extract(file, '.')\n filename = file.split('/')[-1]\n new_path = f'data/{fruits_folder}/{filename}'\n os.rename(file, new_path)\n\n # Nettoyer\n import shutil\n if os.path.exists('fruits-360_dataset'):\n shutil.rmtree('fruits-360_dataset')\n\n print(\"Extraction termin\u00e9e.\")\nelse:\n print(\"Donn\u00e9es d\u00e9j\u00e0 extraites, pas besoin de re-extraire.\")\n\n# 6. V\u00e9rification finale\nprint(f\"PATH: {PATH}\")\nprint(f\"PATH_Data: {PATH_Data}\")\nprint(f\"PATH_Result: {PATH_Result}\")\nif os.path.exists(PATH_Data):\n image_files = [f for f in os.listdir(PATH_Data) if f.endswith('.jpg')]\n print(f\"Images disponibles: {len(image_files)} fichiers\")\n if len(image_files) > 0:\n print(f\"Exemples: {image_files[:5]}\")", "execution_count": 3, "outputs": [{"output_type": "stream", "name": "stdout", "text": "Mounted at /content/drive\nDonn\u00e9es d\u00e9j\u00e0 extraites, pas besoin de re-extraire.\nPATH: /content/drive/MyDrive/Colab_Notebooks/Project_11\nPATH_Data: /content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits\nPATH_Result: /content/drive/MyDrive/Colab_Notebooks/Project_11/data/Results\nImages disponibles: 103 fichiers\nExemples: ['Bananas(lady_finger)1.jpg', 'Bananas(lady_finger)2.jpg', 'Bananas(lady_finger)3.jpg', 'Bananas(lady_finger)4.jpg', 'Bananas(lady_finger)5.jpg']\n"}]}, {"metadata": {"id": "da5e637a"}, "id": "da5e637a", "cell_type": "markdown", "source": "## 3.6 Cr\u00e9ation de la SparkSession\n\nL\u2019application Spark est contr\u00f4l\u00e9e gr\u00e2ce \u00e0 un processus de pilotage (driver process) appel\u00e9 **SparkSession**. <br />\n<u>Une instance de **SparkSession** est la fa\u00e7on dont Spark ex\u00e9cute les fonctions d\u00e9finies par l\u2019utilisateur <br />\ndans l\u2019ensemble du cluster</u>. <u>Une SparkSession correspond toujours \u00e0 une application Spark</u>.\n\n<u>Ici nous cr\u00e9ons une session spark en sp\u00e9cifiant dans l'ordre</u> :\n 1. un **nom pour l'application**, qui sera affich\u00e9e dans l'interface utilisateur Web Spark \"**P11**\"\n 2. que l'application doit s'ex\u00e9cuter **localement**. <br />\n Nous ne d\u00e9finissons pas le nombre de c\u0153urs \u00e0 utiliser (comme .master('local[4]) pour 4 c\u0153urs \u00e0 utiliser), <br />\n nous utiliserons donc tous les c\u0153urs disponibles dans notre processeur.<br />\n 3. une option de configuration suppl\u00e9mentaire permettant d'utiliser le **format \"parquet\"** <br />\n que nous utiliserons pour enregistrer et charger le r\u00e9sultat de notre travail.\n 4. vouloir **obtenir une session spark** existante ou si aucune n'existe, en cr\u00e9er une nouvelle"}, {"metadata": {"id": "b7bea157", "trusted": false}, "id": "b7bea157", "cell_type": "code", "source": "spark = (SparkSession\n .builder\n .appName('P11')\n .master('local')\n .config(\"spark.sql.parquet.writeLegacyFormat\", 'true')\n .getOrCreate()\n)", "execution_count": 4, "outputs": []}, {"metadata": {"id": "5c8b53ac"}, "id": "5c8b53ac", "cell_type": "markdown", "source": "<u>Nous cr\u00e9ons \u00e9galement la variable \"**sc**\" qui est un **SparkContext** issue de la variable **spark**</u> :"}, {"metadata": {"id": "14aeccb1", "trusted": false}, "id": "14aeccb1", "cell_type": "code", "source": "sc = spark.sparkContext", "execution_count": 5, "outputs": []}, {"metadata": {"id": "5a086010"}, "id": "5a086010", "cell_type": "markdown", "source": "<u>Affichage des informations de Spark en cours d'execution</u> :"}, {"metadata": {"id": "e97bf13b", "colab": {"base_uri": "https://localhost:8080/", "height": 219}, "outputId": "51ff07dc-961e-465b-b664-eb341d6c7a7b", "trusted": false}, "id": "e97bf13b", "cell_type": "code", "source": "spark", "execution_count": 6, "outputs": [{"output_type": "execute_result", "data": {"text/plain": "<pyspark.sql.session.SparkSession at 0x7ecde4200710>", "text/html": "\n <div>\n <p><b>SparkSession - in-memory</b></p>\n \n <div>\n <p><b>SparkContext</b></p>\n\n <p><a href=\"http://988c237adedf:4040\">Spark UI</a></p>\n\n <dl>\n <dt>Version</dt>\n <dd><code>v3.5.1</code></dd>\n <dt>Master</dt>\n <dd><code>local</code></dd>\n <dt>AppName</dt>\n <dd><code>P11</code></dd>\n </dl>\n </div>\n \n </div>\n "}, "metadata": {}, "execution_count": 6}]}, {"metadata": {"id": "195a88b0"}, "id": "195a88b0", "cell_type": "markdown", "source": "## 3.7 Traitement des donn\u00e9es\n\n<u>Dans la suite de notre flux de travail, <br />\nnous allons successivement</u> :\n1. Pr\u00e9parer nos donn\u00e9es\n 1. Importer les images dans un dataframe **pandas UDF**\n 2. Associer aux images leur **label**\n 3. Pr\u00e9processer en **redimensionnant nos images pour <br />\n qu'elles soient compatibles avec notre mod\u00e8le**\n2. Pr\u00e9parer notre mod\u00e8le\n 1. Importer le mod\u00e8le **MobileNetV2**\n 2. Cr\u00e9er un **nouveau mod\u00e8le** d\u00e9pourvu de la derni\u00e8re couche de MobileNetV2\n3. D\u00e9finir le processus de chargement des images et l'application <br />\n de leur featurisation \u00e0 travers l'utilisation de pandas UDF\n3. Ex\u00e9cuter les actions d'extraction de features\n4. Enregistrer le r\u00e9sultat de nos actions\n5. Tester le bon fonctionnement en chargeant les donn\u00e9es enregistr\u00e9es\n\n\n"}, {"metadata": {"id": "386fe0bc"}, "id": "386fe0bc", "cell_type": "markdown", "source": "### 3.7.1 Chargement des donn\u00e9es\n\nLes images sont charg\u00e9es au format binaire, ce qui offre, <br />\nplus de souplesse dans la fa\u00e7on de pr\u00e9traiter les images.\n\nAvant de charger les images, nous sp\u00e9cifions que nous voulons charger <br />\nuniquement les fichiers dont l'extension est **jpg**.\n\nNous indiquons \u00e9galement de charger tous les objets possibles contenus <br />\ndans les sous-dossiers du dossier communiqu\u00e9."}, {"metadata": {"id": "e68e53b9", "trusted": false}, "id": "e68e53b9", "cell_type": "code", "source": "images = spark.read.format(\"binaryFile\") \\\n .option(\"pathGlobFilter\", \"*.jpg\") \\\n .option(\"recursiveFileLookup\", \"true\") \\\n .load(PATH_Data)", "execution_count": 7, "outputs": []}, {"metadata": {"id": "645faeaf"}, "id": "645faeaf", "cell_type": "markdown", "source": "<u>Affichage des 5 premi\u00e8res images contenant</u> :\n - le path de l'image\n - la date et heure de sa derni\u00e8re modification\n - sa longueur\n - son contenu encod\u00e9 en valeur hexad\u00e9cimal"}, {"metadata": {"id": "863981e5"}, "id": "863981e5", "cell_type": "markdown", "source": "<u>Je ne conserve que le **path** de l'image et j'ajoute <br />\n une colonne contenant les **labels** de chaque image</u> :"}, {"metadata": {"id": "a08b0494", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "f212daf6-ade4-4f49-8d3f-5406ed43d50d", "trusted": false}, "id": "a08b0494", "cell_type": "code", "source": "images = images.withColumn('label', element_at(split(images['path'], '/'),-2))\nprint(images.printSchema())\nprint(images.select('path','label').show(5,False))", "execution_count": 8, "outputs": [{"output_type": "stream", "name": "stdout", "text": "root\n |-- path: string (nullable = true)\n |-- modificationTime: timestamp (nullable = true)\n |-- length: long (nullable = true)\n |-- content: binary (nullable = true)\n |-- label: string (nullable = true)\n\nNone\n+--------------------------------------------------------------------------------------------------+--------------------+\n|path |label |\n+--------------------------------------------------------------------------------------------------+--------------------+\n|file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/cherries.jpg |test-multiple_fruits|\n|file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/strawberries.jpg |test-multiple_fruits|\n|file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/apples4.jpg |test-multiple_fruits|\n|file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/strawberries5.jpg|test-multiple_fruits|\n|file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/plums_pears.jpg |test-multiple_fruits|\n+--------------------------------------------------------------------------------------------------+--------------------+\nonly showing top 5 rows\n\nNone\n"}]}, {"metadata": {"id": "83d47705"}, "id": "83d47705", "cell_type": "markdown", "source": "### 3.7.2 Pr\u00e9paration du mod\u00e8le\n\nJe vais utiliser la technique du **transfert learning** pour extraire les features des images.<br />\nJ'ai choisi d'utiliser le mod\u00e8le **MobileNetV2** pour sa rapidit\u00e9 d'ex\u00e9cution compar\u00e9e <br />\n\u00e0 d'autres mod\u00e8les comme *VGG16* par exemple.\n\nPour en savoir plus sur la conception et le fonctionnement de MobileNetV2, <br />\nje vous invite \u00e0 lire [cet article](https://towardsdatascience.com/review-mobilenetv2-light-weight-model-image-classification-8febb490e61c).\n\n<u>Voici le sch\u00e9ma de son architecture globale</u> :\n\n![Architecture de MobileNetV2](img/mobilenetv2_architecture.png)\n\nIl existe une derni\u00e8re couche qui sert \u00e0 classer les images <br />\nselon 1000 cat\u00e9gories que nous ne voulons pas utiliser.<br />\nL'id\u00e9e dans ce projet est de r\u00e9cup\u00e9rer le **vecteur de caract\u00e9ristiques <br />\nde dimensions (1,1,1280)** qui servira, plus tard, au travers d'un moteur <br />\nde classification \u00e0 reconnaitre les diff\u00e9rents fruits du jeu de donn\u00e9es.\n\nComme d'autres mod\u00e8les similaires, **MobileNetV2**, lorsqu'on l'utilise <br />\nen incluant toutes ses couches, attend obligatoirement des images <br />\nde dimension (224,224,3). Nos images \u00e9tant toutes de dimension (100,100,3), <br />\nnous devrons simplement les **redimensionner** avant de les confier au mod\u00e8le.\n\n<u>Dans l'odre</u> :\n 1. Nous chargeons le mod\u00e8le **MobileNetV2** avec les poids **pr\u00e9calcul\u00e9s** <br />\n issus d'**imagenet** et en sp\u00e9cifiant le format de nos images en entr\u00e9e\n 2. Nous cr\u00e9ons un nouveau mod\u00e8le avec:\n - <u>en entr\u00e9e</u> : l'entr\u00e9e du mod\u00e8le MobileNetV2\n - <u>en sortie</u> : l'avant derni\u00e8re couche du mod\u00e8le MobileNetV2"}, {"metadata": {"id": "9cdd9bdf", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "706dbce8-ecdb-495f-ba37-55edf25614b7", "trusted": false}, "id": "9cdd9bdf", "cell_type": "code", "source": "model = MobileNetV2(weights='imagenet',\n include_top=True,\n input_shape=(224, 224, 3))", "execution_count": 9, "outputs": [{"output_type": "stream", "name": "stdout", "text": "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224.h5\n\u001b[1m14536120/14536120\u001b[0m \u001b[32m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n"}]}, {"metadata": {"id": "99d6b68d", "trusted": false}, "id": "99d6b68d", "cell_type": "code", "source": "new_model = Model(inputs=model.input,\n outputs=model.layers[-2].output)", "execution_count": 10, "outputs": []}, {"metadata": {"id": "7b197379"}, "id": "7b197379", "cell_type": "markdown", "source": "Affichage du r\u00e9sum\u00e9 de notre nouveau mod\u00e8le o\u00f9 nous constatons <br />\nque <u>nous r\u00e9cup\u00e9rons bien en sortie un vecteur de dimension (1, 1, 1280)</u> :"}, {"metadata": {"id": "e8207725", "colab": {"base_uri": "https://localhost:8080/", "height": 1000}, "outputId": "75e59d23-3aa2-4ae8-e2c4-45739da72a5f", "trusted": false}, "id": "e8207725", "cell_type": "code", "source": "new_model.summary()", "execution_count": 11, "outputs": [{"output_type": "display_data", "data": {"text/plain": "\u001b[1mModel: \"functional\"\u001b[0m\n", "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"functional\"</span>\n</pre>\n"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m\u2503\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m\u2503\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m\u2503\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m\u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 input_layer \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m224\u001b[0m, \u001b[38;5;34m224\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 - \u2502\n\u2502 (\u001b[38;5;33mInputLayer\u001b[0m) \u2502 \u001b[38;5;34m3\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv1 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m864\u001b[0m \u2502 input_layer[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 bn_Conv1 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m128\u001b[0m \u2502 Conv1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv1_relu (\u001b[38;5;33mReLU\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 bn_Conv1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m288\u001b[0m \u2502 Conv1_relu[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m128\u001b[0m \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_proj\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m512\u001b[0m \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m16\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_proj\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m64\u001b[0m \u2502 expanded_conv_pr\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m16\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 expanded_conv_pr\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m384\u001b[0m \u2502 block_1_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u001b[38;5;34m112\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_1_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_pad \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m113\u001b[0m, \u001b[38;5;34m113\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_1_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mZeroPadding2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m864\u001b[0m \u2502 block_1_pad[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m384\u001b[0m \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m24\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m96\u001b[0m \u2502 block_1_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m24\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_1_project_\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m576\u001b[0m \u2502 block_2_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_2_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m1,296\u001b[0m \u2502 block_2_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m576\u001b[0m \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m24\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m96\u001b[0m \u2502 block_2_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m24\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_1_project_\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m24\u001b[0m) \u2502 \u2502 block_2_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_2_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m576\u001b[0m \u2502 block_3_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u001b[38;5;34m56\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_3_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_pad \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m57\u001b[0m, \u001b[38;5;34m57\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_3_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mZeroPadding2D\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m1,296\u001b[0m \u2502 block_3_pad[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m576\u001b[0m \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m144\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m4,608\u001b[0m \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m128\u001b[0m \u2502 block_3_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m6,144\u001b[0m \u2502 block_3_project_\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_4_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_4_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m1,728\u001b[0m \u2502 block_4_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m6,144\u001b[0m \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m128\u001b[0m \u2502 block_4_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_3_project_\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 block_4_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m6,144\u001b[0m \u2502 block_4_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_5_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_5_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m1,728\u001b[0m \u2502 block_5_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m6,144\u001b[0m \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m128\u001b[0m \u2502 block_5_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_4_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m32\u001b[0m) \u2502 \u2502 block_5_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m6,144\u001b[0m \u2502 block_5_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_6_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_6_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_pad \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m29\u001b[0m, \u001b[38;5;34m29\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_6_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mZeroPadding2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,728\u001b[0m \u2502 block_6_pad[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m768\u001b[0m \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m192\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m12,288\u001b[0m \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m256\u001b[0m \u2502 block_6_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_6_project_\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_7_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_7_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_7_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m256\u001b[0m \u2502 block_7_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_6_project_\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 block_7_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_7_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_8_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_8_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_8_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m256\u001b[0m \u2502 block_8_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_7_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 block_8_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_8_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_9_expand[\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand_relu \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_9_expand_B\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_9_expand_r\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise_\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m256\u001b[0m \u2502 block_9_project[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_8_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m64\u001b[0m) \u2502 \u2502 block_9_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m24,576\u001b[0m \u2502 block_9_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_10_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_10_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m3,456\u001b[0m \u2502 block_10_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m1,536\u001b[0m \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m384\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m36,864\u001b[0m \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m384\u001b[0m \u2502 block_10_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m55,296\u001b[0m \u2502 block_10_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_11_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_11_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m5,184\u001b[0m \u2502 block_11_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m55,296\u001b[0m \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m384\u001b[0m \u2502 block_11_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_10_project\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 block_11_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m55,296\u001b[0m \u2502 block_11_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_12_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_12_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m5,184\u001b[0m \u2502 block_12_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m55,296\u001b[0m \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m384\u001b[0m \u2502 block_12_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_11_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 \u2502 \u001b[38;5;34m96\u001b[0m) \u2502 \u2502 block_12_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m55,296\u001b[0m \u2502 block_12_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_13_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_13_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_pad \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_13_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mZeroPadding2D\u001b[0m) \u2502 \u001b[38;5;34m576\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m576\u001b[0m) \u2502 \u001b[38;5;34m5,184\u001b[0m \u2502 block_13_pad[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m576\u001b[0m) \u2502 \u001b[38;5;34m2,304\u001b[0m \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m576\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m92,160\u001b[0m \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m640\u001b[0m \u2502 block_13_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m153,600\u001b[0m \u2502 block_13_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_14_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_14_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m8,640\u001b[0m \u2502 block_14_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m153,600\u001b[0m \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m640\u001b[0m \u2502 block_14_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_13_project\u2026 \u2502\n\u2502 \u2502 \u2502 \u2502 block_14_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m153,600\u001b[0m \u2502 block_14_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_15_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_15_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m8,640\u001b[0m \u2502 block_15_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m153,600\u001b[0m \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m640\u001b[0m \u2502 block_15_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_add (\u001b[38;5;33mAdd\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m160\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_14_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 \u2502 \u2502 \u2502 block_15_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m153,600\u001b[0m \u2502 block_15_add[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_16_expand[\u001b[38;5;34m\u2026\u001b[0m \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand_re\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_16_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m8,640\u001b[0m \u2502 block_16_expand_\u2026 \u2502\n\u2502 (\u001b[38;5;33mDepthwiseConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m3,840\u001b[0m \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m960\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mReLU\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_project \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m320\u001b[0m) \u2502 \u001b[38;5;34m307,200\u001b[0m \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_project_BN \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m320\u001b[0m) \u2502 \u001b[38;5;34m1,280\u001b[0m \u2502 block_16_project\u2026 \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv_1 (\u001b[38;5;33mConv2D\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u2502 \u001b[38;5;34m409,600\u001b[0m \u2502 block_16_project\u2026 \u2502\n\u2502 \u2502 \u001b[38;5;34m1280\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv_1_bn \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u2502 \u001b[38;5;34m5,120\u001b[0m \u2502 Conv_1[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mBatchNormalizatio\u2026\u001b[0m \u2502 \u001b[38;5;34m1280\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 out_relu (\u001b[38;5;33mReLU\u001b[0m) \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u2502 \u001b[38;5;34m0\u001b[0m \u2502 Conv_1_bn[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 \u2502 \u001b[38;5;34m1280\u001b[0m) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 global_average_poo\u2026 \u2502 (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1280\u001b[0m) \u2502 \u001b[38;5;34m0\u001b[0m \u2502 out_relu[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] \u2502\n\u2502 (\u001b[38;5;33mGlobalAveragePool\u2026\u001b[0m \u2502 \u2502 \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n", "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503<span style=\"font-weight: bold\"> Layer (type) </span>\u2503<span style=\"font-weight: bold\"> Output Shape </span>\u2503<span style=\"font-weight: bold\"> Param # </span>\u2503<span style=\"font-weight: bold\"> Connected to </span>\u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 input_layer \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">224</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">224</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 - \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">InputLayer</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">864</span> \u2502 input_layer[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 bn_Conv1 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> \u2502 Conv1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv1_relu (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 bn_Conv1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">288</span> \u2502 Conv1_relu[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_dept\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_proj\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">512</span> \u2502 expanded_conv_de\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 expanded_conv_proj\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span> \u2502 expanded_conv_pr\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 expanded_conv_pr\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span> \u2502 block_1_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">112</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_1_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_pad \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">113</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">113</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_1_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ZeroPadding2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">864</span> \u2502 block_1_pad[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span> \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_1_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_1_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span> \u2502 block_1_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_1_project_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span> \u2502 block_2_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_2_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,296</span> \u2502 block_2_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span> \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_2_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span> \u2502 block_2_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_2_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_1_project_\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24</span>) \u2502 \u2502 block_2_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_2_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span> \u2502 block_3_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">56</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_3_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_pad \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">57</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">57</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_3_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ZeroPadding2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,296</span> \u2502 block_3_pad[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span> \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">144</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">4,608</span> \u2502 block_3_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_3_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> \u2502 block_3_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">6,144</span> \u2502 block_3_project_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_4_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_4_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,728</span> \u2502 block_4_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">6,144</span> \u2502 block_4_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> \u2502 block_4_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_4_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_3_project_\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 block_4_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">6,144</span> \u2502 block_4_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_5_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_5_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,728</span> \u2502 block_5_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">6,144</span> \u2502 block_5_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span> \u2502 block_5_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_5_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_4_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) \u2502 \u2502 block_5_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">6,144</span> \u2502 block_5_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_6_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">28</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_6_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_pad \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">29</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">29</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_6_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ZeroPadding2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,728</span> \u2502 block_6_pad[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">768</span> \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">192</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">12,288</span> \u2502 block_6_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_6_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span> \u2502 block_6_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_6_project_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_7_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_7_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_7_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_7_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span> \u2502 block_7_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_7_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_6_project_\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 block_7_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_7_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_8_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_8_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_8_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_8_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span> \u2502 block_8_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_8_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_7_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 block_8_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_8_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_9_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_expand_relu \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_9_expand_B\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_9_expand_r\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_depthwise_\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_9_depthwis\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span> \u2502 block_9_project[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_9_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_8_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) \u2502 \u2502 block_9_project_\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">24,576</span> \u2502 block_9_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_10_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_10_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,456</span> \u2502 block_10_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,536</span> \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">36,864</span> \u2502 block_10_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_10_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span> \u2502 block_10_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">55,296</span> \u2502 block_10_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_11_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_11_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">5,184</span> \u2502 block_11_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">55,296</span> \u2502 block_11_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span> \u2502 block_11_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_11_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_10_project\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 block_11_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">55,296</span> \u2502 block_11_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_12_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_12_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">5,184</span> \u2502 block_12_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">55,296</span> \u2502 block_12_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">384</span> \u2502 block_12_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_12_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_11_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">96</span>) \u2502 \u2502 block_12_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">55,296</span> \u2502 block_12_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_13_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">14</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_13_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_pad \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">15</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">15</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_13_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ZeroPadding2D</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">5,184</span> \u2502 block_13_pad[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">2,304</span> \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">92,160</span> \u2502 block_13_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_13_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">640</span> \u2502 block_13_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">153,600</span> \u2502 block_13_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_14_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_14_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">8,640</span> \u2502 block_14_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">153,600</span> \u2502 block_14_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">640</span> \u2502 block_14_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_14_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_13_project\u2026 \u2502\n\u2502 \u2502 \u2502 \u2502 block_14_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">153,600</span> \u2502 block_14_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_15_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_15_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">8,640</span> \u2502 block_15_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">153,600</span> \u2502 block_15_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">640</span> \u2502 block_15_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_15_add (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Add</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_14_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 \u2502 \u2502 \u2502 block_15_project\u2026 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">153,600</span> \u2502 block_15_add[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_16_expand[<span style=\"color: #00af00; text-decoration-color: #00af00\">\u2026</span> \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_expand_re\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_16_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">8,640</span> \u2502 block_16_expand_\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">DepthwiseConv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">3,840</span> \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_depthwise\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">960</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_project \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">307,200</span> \u2502 block_16_depthwi\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 block_16_project_BN \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1,280</span> \u2502 block_16_project\u2026 \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">409,600</span> \u2502 block_16_project\u2026 \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1280</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Conv_1_bn \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">5,120</span> \u2502 Conv_1[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">BatchNormalizatio\u2026</span> \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1280</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 out_relu (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">ReLU</span>) \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">7</span>, \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 Conv_1_bn[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">1280</span>) \u2502 \u2502 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 global_average_poo\u2026 \u2502 (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1280</span>) \u2502 <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> \u2502 out_relu[<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>][<span style=\"color: #00af00; text-decoration-color: #00af00\">0</span>] \u2502\n\u2502 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">GlobalAveragePool\u2026</span> \u2502 \u2502 \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n</pre>\n"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m2,257,984\u001b[0m (8.61 MB)\n", "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">2,257,984</span> (8.61 MB)\n</pre>\n"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m2,223,872\u001b[0m (8.48 MB)\n", "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">2,223,872</span> (8.48 MB)\n</pre>\n"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m34,112\u001b[0m (133.25 KB)\n", "text/html": "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">34,112</span> (133.25 KB)\n</pre>\n"}, "metadata": {}}]}, {"metadata": {"id": "2a0adcf5"}, "id": "2a0adcf5", "cell_type": "markdown", "source": "Tous les workeurs doivent pouvoir acc\u00e9der au mod\u00e8le ainsi qu'\u00e0 ses poids. <br />\nUne bonne pratique consiste \u00e0 charger le mod\u00e8le sur le driver puis \u00e0 diffuser <br />\nensuite les poids aux diff\u00e9rents workeurs."}, {"metadata": {"id": "1cc53ff0", "trusted": false}, "id": "1cc53ff0", "cell_type": "code", "source": "brodcast_weights = sc.broadcast(new_model.get_weights())", "execution_count": 12, "outputs": []}, {"metadata": {"id": "8bc0e34e"}, "id": "8bc0e34e", "cell_type": "markdown", "source": "<u>Mettons cela sous forme de fonction</u> :"}, {"metadata": {"id": "3fd51ba9", "trusted": false}, "id": "3fd51ba9", "cell_type": "code", "source": "def model_fn():\n \"\"\"\n Returns a MobileNetV2 model with top layer removed\n and broadcasted pretrained weights.\n \"\"\"\n model = MobileNetV2(weights=None, # There is no need to download pre-trained imagenet weights, as we already have broadcast_weights.\n include_top=True,\n input_shape=(224, 224, 3))\n for layer in model.layers:\n layer.trainable = False\n new_model = Model(inputs=model.input,\n outputs=model.layers[-2].output)\n new_model.set_weights(brodcast_weights.value)\n return new_model", "execution_count": 13, "outputs": []}, {"metadata": {"id": "e5620876"}, "id": "e5620876", "cell_type": "markdown", "source": "### 3.7.3 D\u00e9finition du processus de chargement des images et application <br/>de leur featurisation \u00e0 travers l'utilisation de pandas UDF\n\nCe notebook d\u00e9finit la logique par \u00e9tapes, jusqu'\u00e0 Pandas UDF.\n\n<u>L'empilement des appels est la suivante</u> :\n\n- Pandas UDF\n - featuriser une s\u00e9rie d'images pd.Series\n - pr\u00e9traiter une image"}, {"metadata": {"id": "dc4e5f69", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "39ff2db7-e5e3-4e95-8cc3-a6ef1ec3b6b6", "trusted": false}, "id": "dc4e5f69", "cell_type": "code", "source": "def preprocess(content):\n \"\"\"\n Preprocesses raw image bytes for prediction.\n \"\"\"\n img = Image.open(io.BytesIO(content)).resize([224, 224])\n arr = img_to_array(img)\n return preprocess_input(arr)\n\ndef featurize_series(model, content_series):\n \"\"\"\n Featurize a pd.Series of raw images using the input model.\n :return: a pd.Series of image features\n \"\"\"\n input = np.stack(content_series.map(preprocess))\n preds = model.predict(input)\n # For some layers, output features will be multi-dimensional tensors.\n # We flatten the feature tensors to vectors for easier storage in Spark DataFrames.\n output = [p.flatten() for p in preds]\n return pd.Series(output)\n\n@pandas_udf('array<float>', PandasUDFType.SCALAR_ITER)\ndef featurize_udf(content_series_iter):\n '''\n This method is a Scalar Iterator pandas UDF wrapping our featurization function.\n The decorator specifies that this returns a Spark DataFrame column of type ArrayType(FloatType).\n\n :param content_series_iter: This argument is an iterator over batches of data, where each batch\n is a pandas Series of image data.\n '''\n # With Scalar Iterator pandas UDFs, we can load the model once and then re-use it\n # for multiple data batches. This amortizes the overhead of loading big models.\n model = model_fn()\n for content_series in content_series_iter:\n yield featurize_series(model, content_series)", "execution_count": 14, "outputs": [{"output_type": "stream", "name": "stderr", "text": "/usr/local/lib/python3.12/dist-packages/pyspark/sql/pandas/functions.py:407: UserWarning: In Python 3.6+ and Spark 3.0+, it is preferred to specify type hints for pandas UDF instead of specifying pandas UDF type which will be deprecated in the future releases. See SPARK-28264 for more details.\n warnings.warn(\n"}]}, {"metadata": {"id": "2bdf2ef9"}, "id": "2bdf2ef9", "cell_type": "markdown", "source": "### 3.7.4 Ex\u00e9cution des actions d'extraction de features\n\nLes Pandas UDF, sur de grands enregistrements (par exemple, de tr\u00e8s grandes images), <br />\npeuvent rencontrer des erreurs de type Out Of Memory (OOM).<br />\nSi vous rencontrez de telles erreurs dans la cellule ci-dessous, <br />\nessayez de r\u00e9duire la taille du lot Arrow via 'maxRecordsPerBatch'\n\nJe n'utiliserai pas cette commande dans ce projet <br />\net je laisse donc la commande en commentaire."}, {"metadata": {"id": "1f30d28c", "trusted": false}, "id": "1f30d28c", "cell_type": "code", "source": "# spark.conf.set(\"spark.sql.execution.arrow.maxRecordsPerBatch\", \"1024\")", "execution_count": 15, "outputs": []}, {"metadata": {"id": "70f8f95d"}, "id": "70f8f95d", "cell_type": "markdown", "source": "Nous pouvons maintenant ex\u00e9cuter la featurisation sur l'ensemble de notre DataFrame Spark.<br />\n<u>REMARQUE</u> : Cela peut prendre beaucoup de temps, tout d\u00e9pend du volume de donn\u00e9es \u00e0 traiter. <br />\n\nNotre jeu de donn\u00e9es **test-multiple_fruits** contient environ **103 images**. <br />\nDans l'ex\u00e9cution en mode **local**, <br />\nnous <u>traiterons cet ensemble complet d'images multi-fruits</u>, parfait pour valider notre pipeline avant le d\u00e9ploiement EMR."}, {"metadata": {"id": "69c1767c", "trusted": false}, "id": "69c1767c", "cell_type": "code", "source": "features_df = images.repartition(20).select(col(\"path\"),\n col(\"label\"),\n featurize_udf(\"content\").alias(\"features\")\n )", "execution_count": 16, "outputs": []}, {"metadata": {"id": "eb5e83ec"}, "id": "eb5e83ec", "cell_type": "markdown", "source": "<u>Rappel du PATH o\u00f9 seront inscrits les fichiers au format \"**parquet**\" <br />\ncontenant nos r\u00e9sultats, \u00e0 savoir, un DataFrame contenant 3 colonnes</u> :\n 1. Path des images\n 2. Label de l'image\n 3. Vecteur de caract\u00e9ristiques de l'image"}, {"metadata": {"id": "67fcdb0f", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "ce576dd4-b90b-4e44-9603-c6ac20f67248", "trusted": false}, "id": "67fcdb0f", "cell_type": "code", "source": "print(PATH_Result)", "execution_count": 17, "outputs": [{"output_type": "stream", "name": "stdout", "text": "/content/drive/MyDrive/Colab_Notebooks/Project_11/data/Results\n"}]}, {"metadata": {"id": "f8901db3"}, "id": "f8901db3", "cell_type": "markdown", "source": "<u>Enregistrement des donn\u00e9es trait\u00e9es au format \"**parquet**\"</u> :"}, {"metadata": {"id": "95d07466", "trusted": false}, "id": "95d07466", "cell_type": "code", "source": "features_df.write.mode(\"overwrite\").parquet(PATH_Result)", "execution_count": 18, "outputs": []}, {"metadata": {"id": "w0bpMD4U6uE1"}, "id": "w0bpMD4U6uE1", "cell_type": "markdown", "source": "### 3.7.5 Ex\u00e9cution d'une PCA distribu\u00e9e\n\n#### Objectif de cette \u00e9tape\n\nL'extraction de features via MobileNetV2 g\u00e9n\u00e8re des vecteurs de **1280 dimensions** par image. Pour un passage \u00e0 l'\u00e9chelle industrielle, cette haute dimensionnalit\u00e9 pose plusieurs d\u00e9fis :\n\n- **Stockage** : 1280 dimensions \u00d7 millions d'images = volumes de donn\u00e9es massifs\n- **Performance** : Les algorithmes de classification sont plus lents sur des donn\u00e9es haute dimension\n- **M\u00e9moire** : Contraintes lors du chargement en m\u00e9moire pour l'entra\u00eenement de mod\u00e8les\n\n#### Pourquoi une PCA distribu\u00e9e ?\n\nLa PCA (Principal Component Analysis) r\u00e9duit la dimensionnalit\u00e9 en conservant les **composantes principales** qui capturent le maximum de variance des donn\u00e9es. Dans notre contexte Big Data :\n\n1. **Calcul distribu\u00e9** : PySpark r\u00e9partit le calcul de la matrice de covariance sur plusieurs machines\n2. **Passage \u00e0 l'\u00e9chelle** : Traitement possible de millions d'images sans limitation m\u00e9moire\n3. **Optimisation** : R\u00e9duction de 1280 \u2192 70 dimensions (compression \u00e9lev\u00e9e) tout en conservant l'information essentielle\n\n#### Impl\u00e9mentation technique\n\nLa PCA distribu\u00e9e n\u00e9cessite une conversion des features au format `Vector` de Spark ML, puis l'application de l'algorithme PCA sur l'ensemble du dataset de mani\u00e8re parall\u00e9lis\u00e9e.\n\n#### Limitation\n\nIl est important de noter que la pr\u00e9sence d'un faible \u00e9chantillon (exemple minimal) va influer sur la variance capt\u00e9e par chacune des composantes principales. 100 composantes principales pour un \u00e9chantillon de test de 102 images va forc\u00e9ment math\u00e9matiquement capter presque 100% de la variance. Cela sera bien moins vrai pour un \u00e9chantillon de plus de 20 000 images. La variable `k_components` sera donc probablement \u00e0 ajuster, en particulier dans l'environnement cloud."}, {"metadata": {"id": "wbm587vl628D", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "65674c05-2eb8-473a-fcdd-01fda9d251cc", "trusted": false}, "id": "wbm587vl628D", "cell_type": "code", "source": "k_components = 70\n\n# Convertir les features en format ML de Spark\ndef to_vector(features):\n return Vectors.dense(features)\n\nvector_udf = udf(to_vector, VectorUDT())\n\n# Pr\u00e9parer les donn\u00e9es pour la PCA\nfeatures_vector_df = features_df.withColumn(\"features_vector\", vector_udf(\"features\"))\n\n# Appliquer la PCA pour r\u00e9duire de 1280 \u00e0 k_components dimensions\npca = PCA(k=k_components, inputCol=\"features_vector\", outputCol=\"pca_features\")\npca_model = pca.fit(features_vector_df)\npca_result = pca_model.transform(features_vector_df)\n\n# Afficher la variance expliqu\u00e9e par les composantes principales\nexplained_variance = pca_model.explainedVariance\ntotal_variance = sum(explained_variance)\nprint(f\"Variance expliqu\u00e9e par les {k_components} premi\u00e8res composantes : {total_variance:.4f} ({total_variance*100:.2f}%)\")\nprint(f\"R\u00e9duction de dimensionnalit\u00e9 : 1280 \u2192 {k_components} dimensions\")\n\n# S\u00e9lectionner les colonnes finales\nfinal_df = pca_result.select(\"path\", \"label\", \"pca_features\")\n\n# Sauvegarder les r\u00e9sultats avec PCA localement\nPATH_Result_PCA = PATH + '/data/Results_PCA'\nfinal_df.write.mode(\"overwrite\").parquet(PATH_Result_PCA)\n\nprint(f\"R\u00e9sultats sauv\u00e9s localement : {PATH_Result_PCA}\")", "execution_count": 19, "outputs": [{"output_type": "stream", "name": "stdout", "text": "Variance expliqu\u00e9e par les 70 premi\u00e8res composantes : 0.9576 (95.76%)\nR\u00e9duction de dimensionnalit\u00e9 : 1280 \u2192 70 dimensions\nR\u00e9sultats sauv\u00e9s localement : /content/drive/MyDrive/Colab_Notebooks/Project_11/data/Results_PCA\n"}]}, {"metadata": {"id": "v_XS6pxs9sMQ"}, "id": "v_XS6pxs9sMQ", "cell_type": "markdown", "source": "### 3.7.6 Comparaison des bases Parquet avec et sans PCA\n\nCette analyse permet de quantifier l'impact de la r\u00e9duction de dimensions sur l'espace de stockage et de valider l'int\u00e9r\u00eat de la PCA dans un contexte Big Data.\n\nNous comparons deux versions des donn\u00e9es :\n- **Features brutes** : 1280 dimensions par image (PATH_Result) \n- **Features PCA** : 70 dimensions par image (PATH_Result_PCA)"}, {"metadata": {"id": "bq_TxzOL-G7g", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "43d791e1-acac-4b58-ff58-949b8c4f64a4", "trusted": false}, "id": "bq_TxzOL-G7g", "cell_type": "code", "source": "def get_folder_size(folder_path):\n \"\"\"Calcule la taille totale d'un dossier en octets\"\"\"\n total_size = 0\n for dirpath, dirnames, filenames in os.walk(folder_path):\n for filename in filenames:\n file_path = os.path.join(dirpath, filename)\n total_size += os.path.getsize(file_path)\n return total_size\n\ndef format_bytes(bytes_value):\n \"\"\"Convertit les octets en format lisible\"\"\"\n for unit in ['B', 'KB', 'MB', 'GB']:\n if bytes_value < 1024.0:\n return f\"{bytes_value:.2f} {unit}\"\n bytes_value /= 1024.0\n return f\"{bytes_value:.2f} TB\"\n\n# Analyse des tailles de stockage\nprint(\"=== ANALYSE COMPARATIVE DES FICHIERS PARQUET ===\\n\")\n\nif os.path.exists(PATH_Result):\n size_original = get_folder_size(PATH_Result)\n print(f\"\ud83d\udcca Features originales (1280D) : {format_bytes(size_original)}\")\nelse:\n print(\"\u274c Dossier PATH_Result non trouv\u00e9\")\n\nif os.path.exists(PATH_Result_PCA):\n size_pca = get_folder_size(PATH_Result_PCA)\n print(f\"\ud83d\udd2c Features PCA (100D) : {format_bytes(size_pca)}\")\nelse:\n print(\"\u274c Dossier PATH_Result_PCA non trouv\u00e9\")\n\n# Calculs de compression\nif os.path.exists(PATH_Result) and os.path.exists(PATH_Result_PCA):\n reduction_ratio = (size_original - size_pca) / size_original * 100\n compression_ratio = size_original / size_pca\n\n print(f\"\\n\ud83d\udcc8 GAINS DE LA PCA :\")\n print(f\" \u2022 R\u00e9duction de taille : {reduction_ratio:.1f}%\")\n print(f\" \u2022 Facteur de compression : {compression_ratio:.1f}x\")\n print(f\" \u2022 Espace \u00e9conomis\u00e9 : {format_bytes(size_original - size_pca)}\")\n\n # Projection pour un dataset complet\n print(f\"\\n\ud83d\udd2e PROJECTION POUR 22,688 IMAGES (dataset Test complet) :\")\n nb_images_test = len([f for f in os.listdir(PATH_Data) if f.endswith('.jpg')])\n scale_factor = 22688 / nb_images_test\n\n projected_original = size_original * scale_factor\n projected_pca = size_pca * scale_factor\n projected_savings = projected_original - projected_pca\n\n print(f\" \u2022 Features 1280D : {format_bytes(projected_original)}\")\n print(f\" \u2022 Features 100D : {format_bytes(projected_pca)}\")\n print(f\" \u2022 \u00c9conomies : {format_bytes(projected_savings)}\")", "execution_count": 20, "outputs": [{"output_type": "stream", "name": "stdout", "text": "=== ANALYSE COMPARATIVE DES FICHIERS PARQUET ===\n\n\ud83d\udcca Features originales (1280D) : 455.99 KB\n\ud83d\udd2c Features PCA (100D) : 110.69 KB\n\n\ud83d\udcc8 GAINS DE LA PCA :\n \u2022 R\u00e9duction de taille : 75.7%\n \u2022 Facteur de compression : 4.1x\n \u2022 Espace \u00e9conomis\u00e9 : 345.30 KB\n\n\ud83d\udd2e PROJECTION POUR 22,688 IMAGES (dataset Test complet) :\n \u2022 Features 1280D : 98.09 MB\n \u2022 Features 100D : 23.81 MB\n \u2022 \u00c9conomies : 74.28 MB\n"}]}, {"metadata": {"id": "f9506f21"}, "id": "f9506f21", "cell_type": "markdown", "source": "## 3.8 Chargement des donn\u00e9es enregistr\u00e9es et validation du r\u00e9sultat\n\n<u>On charge les donn\u00e9es fraichement enregistr\u00e9es dans un **DataFrame Pandas**</u> :"}, {"metadata": {"id": "19243bf5", "trusted": false}, "id": "19243bf5", "cell_type": "code", "source": "df_pca = pd.read_parquet(PATH_Result_PCA, engine='pyarrow')", "execution_count": 21, "outputs": []}, {"metadata": {"id": "bG3lZTbQEpgX", "colab": {"base_uri": "https://localhost:8080/", "height": 35}, "outputId": "a2ec0c4c-60e5-47ce-9bb2-e7eef000fc38", "trusted": false}, "id": "bG3lZTbQEpgX", "cell_type": "code", "source": "PATH_Result_PCA", "execution_count": 22, "outputs": [{"output_type": "execute_result", "data": {"text/plain": "'/content/drive/MyDrive/Colab_Notebooks/Project_11/data/Results_PCA'", "application/vnd.google.colaboratory.intrinsic+json": {"type": "string"}}, "metadata": {}, "execution_count": 22}]}, {"metadata": {"id": "27f15070"}, "id": "27f15070", "cell_type": "markdown", "source": "<u>On affiche les 5 premi\u00e8res lignes du DataFrame</u> :"}, {"metadata": {"id": "8a1bcdeb", "colab": {"base_uri": "https://localhost:8080/", "height": 206}, "outputId": "879a6a93-3171-488d-a156-1788c5751e68", "trusted": false}, "id": "8a1bcdeb", "cell_type": "code", "source": "df_pca.head()", "execution_count": 23, "outputs": [{"output_type": "execute_result", "data": {"text/plain": " path label \\\n0 file:/content/drive/MyDrive/Colab_Notebooks/Pr... test-multiple_fruits \n1 file:/content/drive/MyDrive/Colab_Notebooks/Pr... test-multiple_fruits \n2 file:/content/drive/MyDrive/Colab_Notebooks/Pr... test-multiple_fruits \n3 file:/content/drive/MyDrive/Colab_Notebooks/Pr... test-multiple_fruits \n4 file:/content/drive/MyDrive/Colab_Notebooks/Pr... test-multiple_fruits \n\n pca_features \n0 {'type': 1, 'size': None, 'indices': None, 'va... \n1 {'type': 1, 'size': None, 'indices': None, 'va... \n2 {'type': 1, 'size': None, 'indices': None, 'va... \n3 {'type': 1, 'size': None, 'indices': None, 'va... \n4 {'type': 1, 'size': None, 'indices': None, 'va... ", "text/html": "\n <div id=\"df-a1281dfb-5cf5-4a14-af61-1800a9b9a754\" class=\"colab-df-container\">\n <div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>path</th>\n <th>label</th>\n <th>pca_features</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>file:/content/drive/MyDrive/Colab_Notebooks/Pr...</td>\n <td>test-multiple_fruits</td>\n <td>{'type': 1, 'size': None, 'indices': None, 'va...</td>\n </tr>\n <tr>\n <th>1</th>\n <td>file:/content/drive/MyDrive/Colab_Notebooks/Pr...</td>\n <td>test-multiple_fruits</td>\n <td>{'type': 1, 'size': None, 'indices': None, 'va...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>file:/content/drive/MyDrive/Colab_Notebooks/Pr...</td>\n <td>test-multiple_fruits</td>\n <td>{'type': 1, 'size': None, 'indices': None, 'va...</td>\n </tr>\n <tr>\n <th>3</th>\n <td>file:/content/drive/MyDrive/Colab_Notebooks/Pr...</td>\n <td>test-multiple_fruits</td>\n <td>{'type': 1, 'size': None, 'indices': None, 'va...</td>\n </tr>\n <tr>\n <th>4</th>\n <td>file:/content/drive/MyDrive/Colab_Notebooks/Pr...</td>\n <td>test-multiple_fruits</td>\n <td>{'type': 1, 'size': None, 'indices': None, 'va...</td>\n </tr>\n </tbody>\n</table>\n</div>\n <div class=\"colab-df-buttons\">\n\n <div class=\"colab-df-container\">\n <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a1281dfb-5cf5-4a14-af61-1800a9b9a754')\"\n title=\"Convert this dataframe to an interactive table.\"\n style=\"display:none;\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n </svg>\n </button>\n\n <style>\n .colab-df-container {\n display:flex;\n gap: 12px;\n }\n\n .colab-df-convert {\n background-color: #E8F0FE;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: #1967D2;\n height: 32px;\n padding: 0 0 0 0;\n width: 32px;\n }\n\n .colab-df-convert:hover {\n background-color: #E2EBFA;\n box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: #174EA6;\n }\n\n .colab-df-buttons div {\n margin-bottom: 4px;\n }\n\n [theme=dark] .colab-df-convert {\n background-color: #3B4455;\n fill: #D2E3FC;\n }\n\n [theme=dark] .colab-df-convert:hover {\n background-color: #434B5C;\n box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n fill: #FFFFFF;\n }\n </style>\n\n <script>\n const buttonEl =\n document.querySelector('#df-a1281dfb-5cf5-4a14-af61-1800a9b9a754 button.colab-df-convert');\n buttonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n\n async function convertToInteractive(key) {\n const element = document.querySelector('#df-a1281dfb-5cf5-4a14-af61-1800a9b9a754');\n const dataTable =\n await google.colab.kernel.invokeFunction('convertToInteractive',\n [key], {});\n if (!dataTable) return;\n\n const docLinkHtml = 'Like what you see? Visit the ' +\n '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n + ' to learn more about interactive tables.';\n element.innerHTML = '';\n dataTable['output_type'] = 'display_data';\n await google.colab.output.renderOutput(dataTable, element);\n const docLink = document.createElement('div');\n docLink.innerHTML = docLinkHtml;\n element.appendChild(docLink);\n }\n </script>\n </div>\n\n\n <div id=\"df-c4928181-d41f-4be4-92ab-d46cacf632e6\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-c4928181-d41f-4be4-92ab-d46cacf632e6')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n\n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-c4928181-d41f-4be4-92ab-d46cacf632e6 button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n </div>\n\n </div>\n </div>\n", "application/vnd.google.colaboratory.intrinsic+json": {"type": "dataframe", "variable_name": "df_pca", "summary": "{\n \"name\": \"df_pca\",\n \"rows\": 103,\n \"fields\": [\n {\n \"column\": \"path\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 103,\n \"samples\": [\n \"file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/Bananas(lady_finger)5.jpg\",\n \"file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/apple.jpg\",\n \"file:/content/drive/MyDrive/Colab_Notebooks/Project_11/data/test-multiple_fruits/mangos_bananas(lady_finger).jpg\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"test-multiple_fruits\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"pca_features\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}}, "metadata": {}, "execution_count": 23}]}, {"metadata": {"id": "e2794fca"}, "id": "e2794fca", "cell_type": "markdown", "source": "<u>On valide que la dimension du vecteur de caract\u00e9ristiques des images est bien de dimension 1280</u> :"}, {"metadata": {"id": "0bb933b9", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "42674763-297d-4e2d-8d6b-0323cdbdcf5c", "trusted": false}, "id": "0bb933b9", "cell_type": "code", "source": "# Explorer la structure du vecteur PCA\npca_vector = df_pca.loc[0,'pca_features']\nprint(f\"Type: {type(pca_vector)}\")\nprint(f\"Cl\u00e9s disponibles: {pca_vector.keys()}\")\nprint(f\"Structure compl\u00e8te: {pca_vector}\")\n\n# Acc\u00e9der aux valeurs du vecteur\nif 'values' in pca_vector:\n values = pca_vector['values']\n print(f\"Nombre de dimensions PCA: {len(values)}\")\n print(f\"Premi\u00e8res valeurs: {values[:5]}\")", "execution_count": 24, "outputs": [{"output_type": "stream", "name": "stdout", "text": "Type: <class 'dict'>\nCl\u00e9s disponibles: dict_keys(['type', 'size', 'indices', 'values'])\nStructure compl\u00e8te: {'type': 1, 'size': None, 'indices': None, 'values': array([ 1.09079279e+01, -2.58490118e+00, 7.87460909e+00, 3.81716565e+00,\n -3.27298081e+00, -4.01129233e-01, 1.96036631e+00, -4.19159324e+00,\n 3.50820197e+00, -3.91018984e+00, -5.62316805e+00, 5.02529295e-01,\n 5.92593268e+00, 1.80210053e+00, -3.53591062e-01, -2.79969543e+00,\n -3.43373668e+00, 4.62941873e-01, 9.85715375e-01, -7.72570108e-01,\n -2.47998529e+00, 1.41398007e+00, 2.58160073e+00, 2.38604316e-01,\n 1.69389754e+00, 5.10729600e+00, 4.99079239e+00, 3.06147872e+00,\n -4.16842221e+00, -8.70391555e-01, -5.98061705e-01, -2.44537620e+00,\n -4.95345172e+00, 3.33079133e+00, 4.72878440e+00, 9.31145228e-01,\n 4.31761611e-01, 3.43800270e-01, 2.11200652e+00, 3.91346604e+00,\n -1.08333814e+00, -3.14158530e+00, 1.62085391e+00, 1.74567617e+00,\n 2.01782274e+00, 1.27057719e+00, -1.14677383e+00, -1.02196263e+00,\n 1.26277623e+00, -2.66410230e-03, 2.17968715e+00, 1.45397561e+00,\n 1.05305554e+00, -3.57333628e+00, 1.35812223e+00, -2.04314584e-01,\n -4.95758838e-01, 1.74265030e+00, -1.59270496e-01, -1.10342592e+00,\n 9.84990707e-02, 2.16139923e-01, 7.87258299e-02, 1.27643005e+00,\n -9.36081302e-01, 4.67872581e-01, -5.89744737e-01, -5.39736848e-02,\n 1.48785526e-01, -9.84151595e-01])}\nNombre de dimensions PCA: 70\nPremi\u00e8res valeurs: [10.90792792 -2.58490118 7.87460909 3.81716565 -3.27298081]\n"}]}, {"metadata": {"id": "d8tbFN8S8FmY", "colab": {"base_uri": "https://localhost:8080/"}, "outputId": "397e2e6e-7013-4396-cdad-8e42c544fdb8", "trusted": false}, "id": "d8tbFN8S8FmY", "cell_type": "code", "source": "df_pca.shape", "execution_count": 25, "outputs": [{"output_type": "execute_result", "data": {"text/plain": "(103, 3)"}, "metadata": {}, "execution_count": 25}]}, {"metadata": {"id": "efe5348d"}, "id": "efe5348d", "cell_type": "markdown", "source": "Nous venons de valider le processus sur le jeu de donn\u00e9es test-multiple_fruits en local o\u00f9 nous avons simul\u00e9 un cluster de machines en r\u00e9partissant la charge de travail sur diff\u00e9rents c\u0153urs de processeur au sein d'une m\u00eame machine.\n\nNous allons maintenant g\u00e9n\u00e9raliser le processus en d\u00e9ployant notre solution sur un r\u00e9el cluster de machines EMR."}, {"metadata": {"id": "I3W19CYWJaq6"}, "id": "I3W19CYWJaq6", "cell_type": "markdown", "source": "# 4. D\u00e9ploiement de la solution sur le cloud\n\nMaintenant que nous avons v\u00e9rifi\u00e9 que notre solution fonctionne, <br />\nil est temps de la <u>d\u00e9ployer \u00e0 plus grande \u00e9chelle sur un vrai cluster de machines</u>.\n\n**Attention**, *je travaille sous Linux avec une version Ubuntu, <br />\nles commandes d\u00e9crites ci-dessous sont donc r\u00e9alis\u00e9es <br />\nexclusivement dans cet environnement.*\n\n<u>Plusieurs contraintes se posent</u> :\n 1. Quel prestataire de Cloud choisir ?\n 2. Quelles solutions de ce prestataire adopter ?\n 3. O\u00f9 stocker nos donn\u00e9es ?\n 4. Comment configurer nos outils dans ce nouvel environnement ?"}, {"metadata": {"id": "gS_ecEuUJgEI"}, "id": "gS_ecEuUJgEI", "cell_type": "markdown", "source": "## 4.1 Choix du prestataire cloud : AWS\n\nLe prestataire le plus connu et qui offre \u00e0 ce jour l'offre <br />\nla plus large dans le cloud computing est **Amazon Web Services** (AWS).<br />\nCertaines de leurs offres sont parfaitement adapt\u00e9es \u00e0 notre probl\u00e9matique <br />\net c'est la raison pour laquelle j'utiliserai leurs services.\n\nL'objectif premier est de pouvoir, gr\u00e2ce \u00e0 AWS, <u>louer de la puissance de calcul \u00e0 la demande</u>. <br />\nL'id\u00e9e \u00e9tant de pouvoir, quel que soit la charge de travail, <br />\nobtenir suffisamment de puissance de calcul pour pouvoir traiter nos images, <br />\nm\u00eame si le volume de donn\u00e9es venait \u00e0 fortement augmenter.\n\nDe plus, la capacit\u00e9 d'utiliser cette puissance de calcul \u00e0 la demande <br />\npermet de diminuer drastiquement les co\u00fbts si l'on compare les co\u00fbts d'une location <br />\nde serveur complet sur une dur\u00e9e fixe (1 mois, 1 ann\u00e9e par exemple).\n"}, {"metadata": {"id": "No-i_nVhJi3r"}, "id": "No-i_nVhJi3r", "cell_type": "markdown", "source": "## 4.2 Choix de la solution technique : EMR\n\n<u>Plusieurs solutions s'offre \u00e0 nous</u> :\n1. Solution **IAAS** (Infrastructure AS A Service)\n - Dans cette configuration **AWS** met \u00e0 notre disposition des serveurs vierges <br />\n sur lequel nous avons un acc\u00e8s en administrateur, ils sont nomm\u00e9s **instance EC2**.<br />\n Pour faire simple, nous pouvons avec cette solution reproduire pratiquement <br />\n \u00e0 l'identique la solution mis en \u0153uvre en local sur notre machine.<br />\n <u>On installe nous-m\u00eame l'int\u00e9gralit\u00e9 des outils puis on ex\u00e9cute notre script</u> :\n - Installation de **Spark**, **Java** etc.\n - Installation de **Python** (via Anaconda par exemple)\n - Installation de **Jupyter Notebook**\n - Installation des **librairies compl\u00e9mentaires**\n - Il faudra bien \u00e9videment veiller \u00e0 **impl\u00e9menter les librairies\n n\u00e9cessaires \u00e0 toutes les machines (workers) du cluster**\n - <u>Avantages</u> :\n - Libert\u00e9 totale de mise en \u0153uvre de la solution\n - Facilit\u00e9 de mise en \u0153uvre \u00e0 partir d'un mod\u00e8le qui s'ex\u00e9cute en local sur une machine Linux\n - <u>Inconv\u00e9nients</u> :\n - Cronophage\n - N\u00e9cessit\u00e9 d'installer et de configurer toute la solution\n - Possible probl\u00e8mes techniques \u00e0 l'installation des outils (des probl\u00e9matiques qui <br />\n n'existaient pas en local sur notre machine peuvent apparaitre sur le serveur EC2)\n - Solution non p\u00e9renne dans le temps, il faudra veiller \u00e0 la mise \u00e0 jour des outils <br />\n et \u00e9ventuellement devoir r\u00e9installer Spark, Java etc.\n2. Solution **PAAS** (Plateforme As A Service)\n - **AWS** fournit \u00e9norm\u00e9ment de services diff\u00e9rents, dans l'un de ceux-l\u00e0 <br />\n il existe une offre qui permet de louer des **instances EC2** <br />\n avec des applications pr\u00e9install\u00e9es et configur\u00e9es : il s'agit du **service EMR**.\n - **Spark** y sera d\u00e9j\u00e0 install\u00e9\n - Possibilit\u00e9 de demander l'installation de **Tensorflow** ainsi que **JupyterHub**\n - Possibilit\u00e9 d'indiquer des **packages compl\u00e9mentaires** \u00e0 installer <br />\n \u00e0 l'initialisation du serveur **sur l'ensemble des machines du cluster**.\n - <u>Avantages</u> :\n - Facilit\u00e9 de mise en \u0153uvre\n - Il suffit de tr\u00e8s peu de configuration pour obtenir <br />\n un environnement parfaitement fonctionnel\n - Rapidit\u00e9 de mise en \u0153uvre\n - Une fois la premi\u00e8re configuration r\u00e9alis\u00e9e, il est tr\u00e8s facile <br />\n et tr\u00e8s rapide de recr\u00e9er des clusters \u00e0 l'identique qui seront <br />\n disponibles presque instantan\u00e9ment (le temps d'instancier les <br />\n serveurs soit environ 15/20 minutes)\n - Solutions mat\u00e9rielless et logicielles optimis\u00e9es par les ing\u00e9nieurs d'AWS\n - On sait que les versions install\u00e9es vont fonctionner <br />\n et que l'architecture propos\u00e9e est optimis\u00e9e\n - Stabilit\u00e9 de la solution\n - Solution \u00e9volutive\n Il est facile d\u2019obtenir \u00e0 chaque nouvelle instanciation une version \u00e0 jour <br />\n de chaque package, en \u00e9tant garanti de leur compatibilit\u00e9 avec le reste de l\u2019environnement.\n - Plus s\u00e9curis\u00e9\n\t- Les \u00e9ventuels patchs de s\u00e9curit\u00e9 seront automatiquement mis \u00e0 jour <br />\n \u00e0 chaque nouvelle instanciation du cluster EMR.\n - <u>Inconv\u00e9nients</u> :\n - Peut-\u00eatre un certain manque de libert\u00e9 sur la version des packages disponibles ? <br />\n M\u00eame si je n'ai pas constat\u00e9 ce probl\u00e8me.\n \n\nJe retiens la solution **PAAS** en choisissant d'utiliser <br />\nle service **EMR** d'Amazon Web Services.<br />\nJe la trouve plus adapt\u00e9e \u00e0 notre probl\u00e9matique et permet <br />\nune mise en \u0153uvre qui soit \u00e0 la fois plus rapide et <br />\nplus efficace que la solution IAAS."}, {"metadata": {"id": "Aik1WTNFJlX9"}, "id": "Aik1WTNFJlX9", "cell_type": "markdown", "source": "## 4.3 Choix de la solution de stockage des donn\u00e9es : Amazon S3\n\n<u>Amazon propose une solution tr\u00e8s efficace pour la gestion du stockage des donn\u00e9es</u> : **Amazon S3**. <br />\nS3 pour Amazon Simple Storage Service.\n\nIl pourrait \u00eatre tentant de stocker nos donn\u00e9es sur l'espace allou\u00e9 par le serveur **EC2**, <br />\nmais si nous ne prenons aucune mesure pour les sauvegarder ensuite sur un autre support, <br />\n<u>les donn\u00e9es seront perdues</u> lorsque le serveur sera r\u00e9sili\u00e9 (on r\u00e9silie le serveur lorsqu'on <br />\nne s'en sert pas pour des raisons de co\u00fbt).<br />\nDe fait, si l'on d\u00e9cide d'utiliser l'espace disque du serveur EC2 il faudra imaginer <br />\nune solution pour sauvegarder les donn\u00e9es avant la r\u00e9siliation du serveur.\nDe plus, nous serions expos\u00e9s \u00e0 certaines probl\u00e9matiques si nos donn\u00e9es venaient \u00e0 <br />\n**saturer** l'espace disponible de nos serveurs (ralentissements, disfonctionnements).\n\n<u>Utiliser **Amazon S3** permet de s'affranchir de toutes ces probl\u00e9matiques</u>. <br />\nL'espace disque disponible est **illimit\u00e9**, et il est **ind\u00e9pendant de nos serveurs EC2**. <br />\nL'acc\u00e8s aux donn\u00e9es est **tr\u00e8s rapide** car nous restons dans l'environnement d'AWS <br />\net nous prenons soin de <u>choisir la m\u00eame r\u00e9gion pour nos serveurs **EC2** et **S3**</u>.\n\nDe plus, comme nous le verrons <u>il est possible d'acc\u00e9der aux donn\u00e9es sur **S3** <br />\n de la m\u00eame mani\u00e8re que l'on **acc\u00e8de aux donn\u00e9es sur un disque local**</u>.<br />\nNous utiliserons simplement un **PATH au format s3://...** ."}, {"metadata": {"id": "iz5n-PrgJoWD"}, "id": "iz5n-PrgJoWD", "cell_type": "markdown", "source": "## 4.4 Configuration de l'environnement de travail\n\nLa premi\u00e8re \u00e9tape est d'installer et de configurer [**AWS Cli**](https://aws.amazon.com/fr/cli/),<br />\nil s'agit de l'**interface en ligne de commande d'AWS**.<br />\nElle nous permet d'**interagir avec les diff\u00e9rents services d'AWS**, comme **S3** par exemple.\n\nPour pouvoir utiliser **AWS Cli**, il faut le configurer en cr\u00e9ant pr\u00e9alablement <br />\nun utilisateur \u00e0 qui on donnera les autorisations dont nous aurons besoin.<br />\nDans ce projet il faut que l'utilisateur ait \u00e0 minima un contr\u00f4le total sur le service S3.\n\n<u>La gestion des utilisateurs et de leurs droits s'effectue via le service **AMI**</u> d'AWS.\n\nUne fois l'utilisateur cr\u00e9\u00e9 et ses autorisations configur\u00e9es nous cr\u00e9ons une **paire de cl\u00e9s** <br />\nqui nous permettra de nous **connecter sans \u00e0 avoir \u00e0 devoir saisir syst\u00e9matiquement notre login/mot de passe**.<br />\n\nIl faut \u00e9galement configurer l'**acc\u00e8s SSH** \u00e0 nos futurs serveurs EC2. <br />\nIci aussi, via un syst\u00e8me de cl\u00e9s qui nous dispense de devoir nous authentifier \"\u00e0 la main\" \u00e0 chaque connexion.\n\nToutes ses \u00e9tapes de configuration sont parfaitement d\u00e9crites <br />\ndans le cours du projet: [D\u00e9couvrez le cloud avec Amazon Web Services / Faites vos premiers pas sur AWS](https://openclassrooms.com/fr/courses/4810836-decouvrez-le-cloud-avec-amazon-web-services/7821712-faites-vos-premiers-pas-sur-aws)"}, {"metadata": {"id": "xvIXRNOPJrT4"}, "id": "xvIXRNOPJrT4", "cell_type": "markdown", "source": "## 4.5 Upload de nos donn\u00e9es sur S3\n\nNos outils sont configur\u00e9s. <br />\nIl faut maintenant uploader nos donn\u00e9es de travail sur Amazon S3.\n\nIci aussi les \u00e9tapes sont d\u00e9crites avec pr\u00e9cision <br />\ndans le cours [D\u00e9couvrez le cloud avec Amazon Web Services / Stockez et acc\u00e9dez \u00e0 des fichiers sur Amazon S3](https://openclassrooms.com/fr/courses/4810836-decouvrez-le-cloud-avec-amazon-web-services/7822690-stockez-et-accedez-a-des-fichiers-sur-amazon-s3)\n\nJe d\u00e9cide de n'uploader que les donn\u00e9es contenues dans le dossier **Test** du [jeu de donn\u00e9es du projet](https://www.kaggle.com/moltean/fruits/download)\n\n\nLa premi\u00e8re \u00e9tape consiste \u00e0 **cr\u00e9er un bucket sur S3** <br />\ndans lequel nous uploaderons les donn\u00e9es du projet:\n- **aws s3 mb s3://p11-data-fruits-grgmdmn**\n\nOn v\u00e9rifie que le bucket \u00e0 bien \u00e9t\u00e9 cr\u00e9\u00e9\n- **aws s3 ls**\n - Si le nom du bucket s'affiche alors c'est qu'il a \u00e9t\u00e9 correctement cr\u00e9\u00e9.\n\nOn copie ensuite le contenu du dossier \"**Test**\" <br />\ndans un r\u00e9pertoire \"**Test**\" sur notre bucket \"**p11-data-fruits-grgmdmn**\":\n1. On se place \u00e0 l'int\u00e9rieur du r\u00e9pertoire **Test**\n2. **aws sync . s3://p11-data-fruits-grgmdmn/Test**\n\nLa commande **sync** est utile pour synchroniser deux r\u00e9pertoires.\n\n<u>Nos donn\u00e9es du projet sont maintenant disponibles sur Amazon S3</u>."}, {"metadata": {"id": "ZsrQsDblLKHS"}, "id": "ZsrQsDblLKHS", "cell_type": "markdown", "source": "## 4.6 Configuration du serveur EMR\n\nUne fois encore, le cours [D\u00e9couvrez le cloud avec Amazon Web Services / D\u00e9couvrez les services d'Amazon EC2](https://openclassrooms.com/fr/courses/4810836-decouvrez-le-cloud-avec-amazon-web-services/7822091-demarrez-votre-premiere-instance-ec2) <br /> d\u00e9taille l'essentiel des \u00e9tapes pour lancer un cluster avec **EMR**.\n\n<u>Je d\u00e9taillerai ici les \u00e9tapes particuli\u00e8res qui nous permettent <br />\nde configurer le serveur selon nos besoins</u> :\n\n1. Cliquez sur Cr\u00e9er un cluster\n![Cr\u00e9er un cluster](img/EMR_creer.png)\n2. Cliquez sur Acc\u00e9der aux options avanc\u00e9es\n![Cr\u00e9er un cluster](img/EMR_options_avancees.png)"}, {"metadata": {"id": "88OoK8MRJtuJ"}, "id": "88OoK8MRJtuJ", "cell_type": "markdown", "source": "### 4.6.1 \u00c9tape 1 : Logiciels et \u00e9tapes"}, {"metadata": {"id": "fnLo7Xg6Jw8V"}, "id": "fnLo7Xg6Jw8V", "cell_type": "markdown", "source": "#### 4.6.1.1 Configuration des logiciels\n\n<u>S\u00e9lectionnez les packages dont nous aurons besoin comme dans la capture d'\u00e9cran</u> :\n1. Nous s\u00e9lectionnons la derni\u00e8re version d'**EMR**, soit la version **6.3.0** au moment o\u00f9 je r\u00e9dige ce document\n2. Nous cochons bien \u00e9videment **Hadoop** et **Spark** qui seront pr\u00e9install\u00e9s dans leur version la plus r\u00e9cente\n3. Nous aurons \u00e9galement besoin de **TensorFlow** pour importer notre mod\u00e8le et r\u00e9aliser le **transfert learning**\n4. Nous travaillerons enfin avec un **notebook Jupyter** via l'application **JupyterHub**<br />\n - Comme nous le verrons dans un instant nous allons <u>param\u00e9trer l'application afin que les notebooks</u>, <br />\n comme le reste de nos donn\u00e9es de travail, <u>soient enregistr\u00e9s directement sur S3</u>.\n![Cr\u00e9er un cluster](img/EMR_configuration_logiciels.png)\n"}, {"metadata": {"id": "jv87lmuCJzL8"}, "id": "jv87lmuCJzL8", "cell_type": "markdown", "source": "#### 4.6.1.2 Modifier les param\u00e8tres du logiciel\n\n<u>Param\u00e9trez la persistance des notebooks cr\u00e9\u00e9s et ouvert via JupyterHub</u> :\n- On peut \u00e0 cette \u00e9tape effectuer des demandes de param\u00e9trage particuli\u00e8res sur nos applications. <br />\n L'objectif est, comme pour le reste de nos donn\u00e9es de travail, <br />\n d'\u00e9viter toutes les probl\u00e9matiques \u00e9voqu\u00e9es pr\u00e9c\u00e9demment. <br />\n C'est l'objectif \u00e0 cette \u00e9tape, <u>nous allons enregistrer <br />\n et ouvrir les notebooks</u> non pas sur l'espace disque de l'instance EC2 (comme <br />\n ce serait le cas dans la configuration par d\u00e9faut de JupyterHub) mais <br />\n <u>directement sur **Amazon S3**</u>.\n- <u>deux solutions sont possibles pour r\u00e9aliser cela</u> :\n 1. Cr\u00e9er un **fichier de configuration JSON** que l'on **upload sur S3** et on indique ensuite le chemin d\u2019acc\u00e8s au fichier JSON\n 2. Rentrez directement la configuration au format JSON\n\nJ'ai personnellement cr\u00e9\u00e9 un fichier JSON lors de la cr\u00e9ation de ma premi\u00e8re instance EMR, <br />\npuis lorsqu'on d\u00e9cide de cloner notre serveur pour en recr\u00e9er un facilement \u00e0 l'identique, <br />\nla configuration du fichier JSON se retrouve directement copi\u00e9 comme dans la capture ci-dessous.\n\n<u>Voici le contenu de mon fichier JSON</u> : [{\"classification\":\"jupyter-s3-conf\",\"properties\":{\"s3.persistence.bucket\":\"p11-data-fruits-grgmdmn\",\"s3.persistence.enabled\":\"true\"}}]\n Appuyez ensuite sur \"**Suivant**\"\n![Modifier les param\u00e8tres du logiciel](img/EMR_parametres_logiciel.png)"}, {"metadata": {"id": "4g2VSxv5J1eF"}, "id": "4g2VSxv5J1eF", "cell_type": "markdown", "source": "### 4.6.2 \u00c9tape 2 : Mat\u00e9riel\n\nA cette \u00e9tape, laissez les choix par d\u00e9faut. <br />\n<u>L'important ici est la s\u00e9lection de nos instances</u> :\n\n1. je choisi les instances de type **M5** qui sont des **instances de type \u00e9quilibr\u00e9s**\n2. je choisi le type **xlarge** qui est l'instance la **moins on\u00e9reuse disponible**\n [Plus d'informations sur les instances M5 Amazon EC2](https://aws.amazon.com/fr/ec2/instance-types/m5/)\n3. Je s\u00e9lectionne **1 instance Ma\u00eetre** (le driver) et **2 instances Principales** (les workeurs) <br />\n soit **un total de 3 instance EC2**.\n![Choix du materiel](img/EMR_materiel.png)"}, {"metadata": {"id": "VusvtajOJ3gH"}, "id": "VusvtajOJ3gH", "cell_type": "markdown", "source": "### 4.6.3 \u00c9tape 3 : Param\u00e8tres de cluster g\u00e9n\u00e9raux\n"}, {"metadata": {"id": "NoHkLEAmJ5RK"}, "id": "NoHkLEAmJ5RK", "cell_type": "markdown", "source": "#### 4.6.3.1 Options g\u00e9n\u00e9rales\n<u>La premi\u00e8re chose \u00e0 faire est de donner un nom au cluster</u> :<br />\n*J'ai \u00e9galement d\u00e9coch\u00e9 \"Protection de la r\u00e9siliation\" pour des raisons pratiques.*\n \n![Nom du Cluster](img/EMR_nom_cluster.png)"}, {"metadata": {"id": "3mll2vJpKB7_"}, "id": "3mll2vJpKB7_", "cell_type": "markdown", "source": "#### 4.6.3.2 Actions d'amor\u00e7age\n\nNous allons \u00e0 cette \u00e9tape **choisir les packages manquants \u00e0 installer** et qui <br />\nnous serons utiles dans l'ex\u00e9cution de notre notebook.<br />\n<u>L'avantage de r\u00e9aliser cette \u00e9tape maintenant est que les packages <br />\ninstall\u00e9s le seront sur l'ensemble des machines du cluster</u>.\n\nNous cr\u00e9ons un fichier nomm\u00e9 \"**bootstrap-emr.sh**\" que nous <u>uploadons <br />\nsur S3</u>(je l\u2019installe \u00e0 la racine de mon **bucket \"p11-data-fruits-grgmdmn\"**) et nous l'ajoutons <br />\ncomme indiqu\u00e9 dans la capture d'\u00e9cran ci-dessous:\n![Actions d'amorcage](img/EMR_amorcage.png)\n\nVoici le contenu du fichier **bootstrap-emr.sh**<br />\nComme on peut le constater il s'agit simplement de commande \"**pip install**\" <br />\npour **installer les biblioth\u00e8ques manquantes** comme r\u00e9alis\u00e9 en local.<br />\nUne fois encore, <u>il est n\u00e9cessaire de r\u00e9aliser ces actions \u00e0 cette \u00e9tape</u> <br />\npour que <u>les packages soient install\u00e9s sur l'ensemble des machines du cluster</u> <br />\net non pas uniquement sur le driver, comme cela serait le cas si nous ex\u00e9cutions <br />\nces commandes directement dans le notebook JupyterHub ou dans la console EMR (connect\u00e9 au driver).\n![Contenu du fichier bootstrap](img/EMR_bootstrap.png)\n\n**setuptools** et **pip** sont mis \u00e0 jour pour \u00e9viter une probl\u00e9matique <br />\navec l'installation du package **pyarrow**.<br />\n**Pandas** a eu droit \u00e0 une mise \u00e0 jour majeur (1.3.0) il y a moins d'une semaine <br />\nau moment de la r\u00e9daction de ce notebook, et la nouvelle version de **Pandas** <br />\nn\u00e9cessite une version plus r\u00e9cente de **Numpy** que la version install\u00e9e par <br />\nd\u00e9faut (1.16.5) \u00e0 l'initialisation des instances **EC2**. <u>Il ne semble pas <br />\npossible d'imposer une autre version de Numpy que celle install\u00e9 par <br />\nd\u00e9faut</u> m\u00eame si on force l'installation d'une version r\u00e9cente de **Numpy** <br />\n(en tout cas, ni simplement ni intuitivement).<br />\nLa mise \u00e0 jour \u00e9tant tr\u00e8s r\u00e9cente <u>la version de **Numpy** n'est pas encore <br />\nmise \u00e0 jour sur **EC2**</u> mais on peut imaginer que ce sera le cas tr\u00e8s rapidement <br />\net il ne sera plus n\u00e9cessaire d'imposer une version sp\u00e9cifique de **Pandas**.<br />\nEn attendant, je demande <u>l'installation de l'avant derni\u00e8re version de **Pandas (1.2.5)**</u>\n\nOn clique ensuite sur ***Suivant***"}, {"metadata": {"id": "Tio8JRR8KDz-"}, "id": "Tio8JRR8KDz-", "cell_type": "markdown", "source": "### 4.6.4 \u00c9tape 4 : S\u00e9curit\u00e9\n"}, {"metadata": {"id": "yGRjrE5pKFp0"}, "id": "yGRjrE5pKFp0", "cell_type": "markdown", "source": "#### 4.6.4.1 Options de s\u00e9curit\u00e9\n\nA cette \u00e9tape nous s\u00e9lectionnons la **paire de cl\u00e9s EC2** cr\u00e9\u00e9 pr\u00e9c\u00e9demment. <br />\nElle nous permettra de se connecter en **ssh** \u00e0 nos **instances EC2** <br />\nsans avoir \u00e0 entrer nos login/mot de passe.<br />\nOn laisse les autres param\u00e8tres par d\u00e9faut. <br />\nEt enfin, on clique sur \"***Cr\u00e9er un cluster***\"\n\n![EMR S\u00e9curit\u00e9](img/EMR_securite.png)"}, {"metadata": {"id": "3ZrKi-3PKIWm"}, "id": "3ZrKi-3PKIWm", "cell_type": "markdown", "source": "## 4.7 Instanciation du serveur\n\nIl ne nous reste plus qu'\u00e0 attendre que le serveur soit pr\u00eat. <br />\nCette \u00e9tape peut prendre entre **15 et 20 minutes**.\n\n<u>Plusieurs \u00e9tapes s'encha\u00eene, on peut suivre l'avanc\u00e9 du statut du **cluster EMR**</u> :\n\n![Instanciation \u00e9tape 1](img/EMR_instanciation_01.png)\n![Instanciation \u00e9tape 2](img/EMR_instanciation_02.png)\n![Instanciation \u00e9tape 3](img/EMR_instanciation_03.png)\n\n<u>Lorsque le statut affiche en vert: \"**En attente**\" cela signifie que l'instanciation <br />\ns'est bien d\u00e9roul\u00e9e et que notre serveur est pr\u00eat \u00e0 \u00eatre utilis\u00e9</u>."}, {"metadata": {"id": "DsZF-q0hKJfW"}, "id": "DsZF-q0hKJfW", "cell_type": "markdown", "source": "## 4.8 Cr\u00e9ation du tunnel SSH \u00e0 l'instance EC2 (Ma\u00eetre)\n"}, {"metadata": {"id": "6QQ7kxSOKOjc"}, "id": "6QQ7kxSOKOjc", "cell_type": "markdown", "source": "### 4.8.1 Cr\u00e9ation des autorisations sur les connexions entrantes\n\n<u>Nous souhaitons maintenant pouvoir acc\u00e9der \u00e0 nos applications</u> :\n - **JupyterHub** pour l'ex\u00e9cution de notre notebook\n - **Serveur d'historique Spark** pour le suivi de l'ex\u00e9cution <br />\n des t\u00e2ches de notre script lorsqu'il sera lanc\u00e9\n\nCependant, <u>ces applications ne sont accessibles que depuis le r\u00e9seau local du driver</u>, <br />\net pour y acc\u00e9der nous devons **cr\u00e9er un tunnel SSH vers le driver**.\n\nPar d\u00e9faut, ce driver se situe derri\u00e8re un firewall qui bloque l'acc\u00e8s en SSH. <br />\n<u>Pour ouvrir le port 22 qui correspond au port sur lequel \u00e9coute le serveur SSH, <br />\nil faut modifier le **groupe de s\u00e9curit\u00e9 EC2 du driver**</u>.\n\n*Il faudra que l'on se connecte en SSH au driver de notre cluster. <br />\nPar d\u00e9faut, ce driver se situe derri\u00e8re un firewall qui bloque l'acc\u00e8s en SSH. <br />\nPour ouvrir le port 22 qui correspond au port sur lequel \u00e9coute le serveur SSH, <br />\nil faut modifier le groupe de s\u00e9curit\u00e9 EC2 du driver. Sur la page de la console <br />\nconsacr\u00e9e \u00e0 EC2, dans l'onglet \"R\u00e9seau et s\u00e9curit\u00e9\", cliquez sur \"Groupes de s\u00e9curit\u00e9\". <br />\nVous allez devoir modifier le groupe de s\u00e9curit\u00e9 d\u2019ElasticMapReduce-Master. <br />\nDans l'onglet \"Entrant\", ajoutez une r\u00e8gle SSH dont la source est \"N'importe o\u00f9\" <br />\n(ou \"Mon IP\" si vous disposez d'une adresse IP fixe).*\n\n![Configuration autorisation ports entrants pour ssh](img/EMR_config_ssh_01.png)\n\n<u>Une fois cette \u00e9tape r\u00e9alis\u00e9e vous devriez avoir une configuration semblable \u00e0 la mienne</u> :\n\n![Configuration ssh termin\u00e9e](img/EMR_config_ssh_02.png)"}, {"metadata": {"id": "NeytVDqVKSUZ"}, "id": "NeytVDqVKSUZ", "cell_type": "markdown", "source": "### 4.8.2 Cr\u00e9ation du tunnel ssh vers le Driver\n\nOn peut maintenant \u00e9tablir le **tunnel SSH** vers le **Driver**. <br />\nPour cela on r\u00e9cup\u00e8re les informations de connexion fournis par Amazon <br />\ndepuis la page du service EMR / Cluster / onglet R\u00e9capitulatif en <br />\ncliquant sur \"**Activer la connexion Web**\"\n\n![Activer la connexion Web](img/EMR_tunnel_ssh_01.png)\n\n<u>On r\u00e9cup\u00e8re ensuite la commande fournis par Amazon pour **\u00e9tablir le tunnel SSH**</u> :\n\n![R\u00e9cup\u00e9rer la commande pour \u00e9tablir le tunnel ssh](img/EMR_tunnel_ssh_02.png)\n\n<u>Dans mon cas, la commande ne fonctionne pas tel</u> quel et j'ai du **l'adapter \u00e0 ma configuration**. <br />\nLa **cl\u00e9 ssh** se situe dans un dossier \"**.ssh**\" elle-m\u00eame situ\u00e9e dans <br />\nmon **r\u00e9pertoire personnel** dont le symbole est, sous Linux, identifi\u00e9 par un tilde \"**~**\".\n\n<u>Finalement, j'utilise la commande suivante dans un terminal pour \u00e9tablir <br />\n mon tunnel ssh (seul l'URL change d'une instance \u00e0 une autre)</u> : <br />\n\"**ssh -i ~/.ssh/p11-ec2.pem -D 5555 hadoop@ec2-35-180-91-39.eu-west-3.compute.amazonaws.com**\"\n\n<u>On inscrit \"**yes**\" pour valider la connexion et si <br />\n la connexion est \u00e9tablit on obtient le r\u00e9sultat suivant</u> :\n\n![Cr\u00e9ation du tunnel SSH](img/EMR_connexion_ssh_01.png)\n\nNous avons **correctement \u00e9tabli le tunnel ssh avec le driver** sur le port \"5555\"."}, {"metadata": {"id": "1_rH_OH1KUk7"}, "id": "1_rH_OH1KUk7", "cell_type": "markdown", "source": "### 4.8.3 Configuration de FoxyProxy\n\nUne derni\u00e8re \u00e9tape est n\u00e9cessaire pour acc\u00e9der \u00e0 nos applications, <br />\nen demandant \u00e0 notre navigateur d'emprunter le tunnel ssh.<br />\nJ'utilise pour cela **FoxyProxy**.\n\nSinon, ouvrez la configuration de **FoxyProxy** et <u>cliquez sur **Ajouter**</u> en haut \u00e0 gauche <br />\npuis renseigner les \u00e9l\u00e9ments comme dans la capture ci-dessous :\n\n![Configuration FoxyProxy Etape 1](img/EMR_foxyproxy_config_01.png)\n\n<u>On obtient le r\u00e9sultat ci-dessous</u> :\n\n![Configuration FoxyProxy Etape 2](img/EMR_foxyproxy_config_02.png)"}, {"metadata": {"id": "4JZXtpoEKV30"}, "id": "4JZXtpoEKV30", "cell_type": "markdown", "source": "### 4.8.4 Acc\u00e8s aux applications du serveur EMR via le tunnel ssh\n\n\n<u>Avant d'\u00e9tablir notre **tunnel ssh** nous avions \u00e7a</u> :\n\n![avant tunnel ssh](img/EMR_tunnel_ssh_avant.png)\n\n<u>On active le **tunnel ssh** comme vu pr\u00e9c\u00e9demment puis on demande <br />\n\u00e0 notre navigateur de l'utiliser avec **FoxyProxy**</u> :\n\n![FoxyProxy activation](img/EMR_foxyproxy_activation.png)\n\n<u>On peut maintenant s'apercevoir que plusieurs applications nous sont accessibles</u> :\n\n![avant tunnel ssh](img/EMR_tunnel_ssh_apres.png)"}, {"metadata": {"id": "Dy0olMsQKaj4"}, "id": "Dy0olMsQKaj4", "cell_type": "markdown", "source": "## 4.9 Connexion au notebook JupyterHub\n\nPour se connecter \u00e0 **JupyterHub** en vue d'ex\u00e9cuter notre **notebook**, <br />\nil faut commencer par <u>cliquer sur l'application **JupyterHub**</u> apparu <br />\ndepuis que nous avons configur\u00e9 le **tunnel ssh** et **foxyproxy** sur <br />\nnotre navigateur (actualisez la page si ce n\u2019est pas le cas).\n\n![D\u00e9marrage de JupyterHub](img/EMR_jupyterhub_connexion_01.png)\n\nOn passe les \u00e9ventuels avertissements de s\u00e9curit\u00e9 puis <br />\nnous arrivons sur une page de connexion.\n \n<u>On se connecte avec les informations par d\u00e9faut</u> :\n - <u>login</u>: **jovyan**\n - <u>password</u>: **jupyter**\n\n![Connexion \u00e0 JupyterHub](img/EMR_jupyterhub_connexion_02.png)\n\nNous arrivons ensuite dans un dossier vierge de notebook.<br />\nIl suffit d'en cr\u00e9er un en cliquant sur \"**New**\" en haut \u00e0 droite.\n\n![Liste et cr\u00e9ation des notebook](img/EMR_jupyterhub_creer_notebooks.png)\n\nIl est \u00e9galement possible d'en <u>uploader un directement dans notre **bucket S3**</u>.\n\nGrace \u00e0 la <u>**persistance** param\u00e9tr\u00e9e \u00e0 l'instanciation du cluster <br />\nnous sommes actuellement dans l'arborescence de notre **bucket S3**</u>\n\n![Notebook stock\u00e9s sur S3](img/EMR_jupyterhub_S3.png)\n\nJe d\u00e9cide d'**importer un notebook d\u00e9j\u00e0 r\u00e9dig\u00e9 en local directement <br />\nsur S3** et je l'ouvre depuis **l'interface JupyterHub**.\n"}, {"metadata": {"id": "a0f0f7c1"}, "id": "a0f0f7c1", "cell_type": "markdown", "source": "\n## 4.10 Ex\u00e9cution du code\n\nJe d\u00e9cide d'ex\u00e9cuter cette partie du code depuis **JupyterHub h\u00e9berg\u00e9 sur notre cluster EMR**.<br />\nPour ne pas alourdir inutilement les explications du **notebook**, je ne r\u00e9expliquerai pas les \u00e9tapes communes <br />\nque nous avons d\u00e9j\u00e0 vues dans la premi\u00e8re partie o\u00f9 l'on a ex\u00e9cut\u00e9 le code localement sur notre machine virtuelle Ubuntu.\n\n<u>Avant de commencer</u>, il faut s'assurer d'utiliser le **kernel pyspark**.\n\n**En utilisant ce kernel, une session spark est cr\u00e9\u00e9 \u00e0 l'ex\u00e9cution de la premi\u00e8re cellule**. <br />\nIl n'est donc **plus n\u00e9cessaire d'ex\u00e9cuter le code \"spark = (SparkSession ...\"** comme lors <br />\nde l'ex\u00e9cution de notre notebook en local sur notre VM Ubuntu."}, {"metadata": {"id": "4e759c1e"}, "id": "4e759c1e", "cell_type": "markdown", "source": "### 4.10.1 D\u00e9marrage de la session Spark"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "e5f0fbe1", "outputId": "42be7f75-4a21-4c3a-e2a4-7da5e937f412", "trusted": true}, "id": "e5f0fbe1", "cell_type": "code", "source": "# L'ex\u00e9cution de cette cellule d\u00e9marre l'application Spark", "execution_count": 1, "outputs": [{"output_type": "stream", "text": "Starting Spark application\n", "name": "stdout"}, {"output_type": "display_data", "data": {"text/plain": "<IPython.core.display.HTML object>", "text/html": "<table>\n<tr><th>ID</th><th>YARN Application ID</th><th>Kind</th><th>State</th><th>Spark UI</th><th>Driver log</th><th>User</th><th>Current session?</th></tr><tr><td>1</td><td>application_1759159217746_0002</td><td>pyspark</td><td>idle</td><td><a target=\"_blank\" href=\"http://ip-172-31-39-254.eu-west-3.compute.internal:20888/proxy/application_1759159217746_0002/\">Link</a></td><td><a target=\"_blank\" href=\"http://ip-172-31-32-63.eu-west-3.compute.internal:8042/node/containerlogs/container_1759159217746_0002_01_000001/livy\">Link</a></td><td>None</td><td>\u2714</td></tr></table>"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "SparkSession available as 'spark'.\n", "name": "stdout"}, {"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"id": "3aba202f"}, "id": "3aba202f", "cell_type": "markdown", "source": "<u>Affichage des informations sur la session en cours et liens vers Spark UI</u> :"}, {"metadata": {"id": "fb788991", "outputId": "d44d20ed-c877-46f9-c7e2-dbdae7a90d49", "trusted": true}, "id": "fb788991", "cell_type": "code", "source": "%%info", "execution_count": 2, "outputs": [{"output_type": "display_data", "data": {"text/plain": "<IPython.core.display.HTML object>", "text/html": "Current session configs: <tt>{'driverMemory': '1000M', 'executorCores': 2, 'proxyUser': 'jovyan', 'kind': 'pyspark'}</tt><br>"}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "<IPython.core.display.HTML object>", "text/html": "<table>\n<tr><th>ID</th><th>YARN Application ID</th><th>Kind</th><th>State</th><th>Spark UI</th><th>Driver log</th><th>User</th><th>Current session?</th></tr><tr><td>1</td><td>application_1759159217746_0002</td><td>pyspark</td><td>idle</td><td><a target=\"_blank\" href=\"http://ip-172-31-39-254.eu-west-3.compute.internal:20888/proxy/application_1759159217746_0002/\">Link</a></td><td><a target=\"_blank\" href=\"http://ip-172-31-32-63.eu-west-3.compute.internal:8042/node/containerlogs/container_1759159217746_0002_01_000001/livy\">Link</a></td><td>None</td><td>\u2714</td></tr></table>"}, "metadata": {}}]}, {"metadata": {"id": "27ac9832"}, "id": "27ac9832", "cell_type": "markdown", "source": "### 4.10.2 Installation des packages\n\nLes packages n\u00e9cessaires ont \u00e9t\u00e9 install\u00e9 via l'\u00e9tape de **bootstrap** \u00e0 l'instanciation du serveur."}, {"metadata": {"id": "Vdg26CbHCSxu"}, "id": "Vdg26CbHCSxu", "cell_type": "markdown", "source": "### 4.10.3 Import des librairies"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "ad562eab", "outputId": "840c3ae9-b8b4-4a1d-837e-90f4631d8ea3", "trusted": true}, "id": "ad562eab", "cell_type": "code", "source": "import pandas as pd\nimport numpy as np\nimport io\nimport os\n\nimport tensorflow as tf\nfrom PIL import Image\nfrom tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input\nfrom tensorflow.keras.preprocessing.image import img_to_array\nfrom tensorflow.keras import Model\nfrom pyspark.sql.functions import col, pandas_udf, PandasUDFType, element_at, split, udf\nfrom pyspark.ml.feature import PCA\nfrom pyspark.ml.linalg import Vectors, VectorUDT # \u2190 VectorUDT est dans pyspark.ml.linalg", "execution_count": 3, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"id": "83663cbd"}, "id": "83663cbd", "cell_type": "markdown", "source": "### 4.10.4 D\u00e9finition des PATH pour charger les images et enregistrer les r\u00e9sultats\n\nNous acc\u00e9dons directement \u00e0 nos **donn\u00e9es sur S3** comme si elles \u00e9taient **stock\u00e9es localement**."}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "46be859d", "outputId": "b1e79841-f018-4c67-9122-740ae5216d1b", "trusted": true}, "id": "46be859d", "cell_type": "code", "source": "PATH = 's3://p11-data-fruits-grgmdmn'\nPATH_Data = PATH+'/test-multiple-fruits'\nPATH_Result = PATH+'/Results'\nprint('PATH: '+\\\n PATH+'\\nPATH_Data: '+\\\n PATH_Data+'\\nPATH_Result: '+PATH_Result)", "execution_count": 4, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "PATH: s3://p11-data-fruits-grgmdmn\nPATH_Data: s3://p11-data-fruits-grgmdmn/test-multiple-fruits\nPATH_Result: s3://p11-data-fruits-grgmdmn/Results", "name": "stdout"}]}, {"metadata": {"id": "cf883c20"}, "id": "cf883c20", "cell_type": "markdown", "source": "### 4.10.5 Traitement des donn\u00e9es"}, {"metadata": {"id": "2ffe93f5"}, "id": "2ffe93f5", "cell_type": "markdown", "source": "#### 4.10.5.1 Chargement des donn\u00e9es"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "7e4b319a", "outputId": "486cf2fa-1bf8-46f2-b67a-09c3475953fc", "trusted": true}, "id": "7e4b319a", "cell_type": "code", "source": "images = spark.read.format(\"binaryFile\") \\\n .option(\"pathGlobFilter\", \"*.jpg\") \\\n .option(\"recursiveFileLookup\", \"true\") \\\n .load(PATH_Data)", "execution_count": 5, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "16bfeb4d", "outputId": "760957ec-eb69-47bf-d458-f6da13bcf981", "trusted": true}, "id": "16bfeb4d", "cell_type": "code", "source": "images.show(5)", "execution_count": 6, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "+--------------------+-------------------+-------+--------------------+\n| path| modificationTime| length| content|\n+--------------------+-------------------+-------+--------------------+\n|s3://p11-data-fru...|2025-09-22 16:37:51|6457796|[FF D8 FF E1 03 F...|\n|s3://p11-data-fru...|2025-09-22 16:38:03|5704339|[FF D8 FF E1 03 F...|\n|s3://p11-data-fru...|2025-09-22 16:38:06|5612220|[FF D8 FF E1 03 4...|\n|s3://p11-data-fru...|2025-09-22 16:38:04|5601970|[FF D8 FF E1 03 F...|\n|s3://p11-data-fru...|2025-09-22 16:37:59|5443640|[FF D8 FF E1 7C 5...|\n+--------------------+-------------------+-------+--------------------+\nonly showing top 5 rows", "name": "stdout"}]}, {"metadata": {"id": "8b32ac34"}, "id": "8b32ac34", "cell_type": "markdown", "source": "<u>Je ne conserve que le **path** de l'image et j'ajoute <br />\n une colonne contenant les **labels** de chaque image</u> :"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "a52ab808", "outputId": "3d8d029c-7fcc-4167-fa44-69feb5b1afc8", "trusted": true}, "id": "a52ab808", "cell_type": "code", "source": "images = images.withColumn('label', element_at(split(images['path'], '/'),-2))\nprint(images.printSchema())\nprint(images.select('path','label').show(5,False))", "execution_count": 7, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "root\n |-- path: string (nullable = true)\n |-- modificationTime: timestamp (nullable = true)\n |-- length: long (nullable = true)\n |-- content: binary (nullable = true)\n |-- label: string (nullable = true)\n\nNone\n+-------------------------------------------------------------------+--------------------+\n|path |label |\n+-------------------------------------------------------------------+--------------------+\n|s3://p11-data-fruits-grgmdmn/test-multiple-fruits/cherries.jpg |test-multiple-fruits|\n|s3://p11-data-fruits-grgmdmn/test-multiple-fruits/strawberries.jpg |test-multiple-fruits|\n|s3://p11-data-fruits-grgmdmn/test-multiple-fruits/apples4.jpg |test-multiple-fruits|\n|s3://p11-data-fruits-grgmdmn/test-multiple-fruits/strawberries5.jpg|test-multiple-fruits|\n|s3://p11-data-fruits-grgmdmn/test-multiple-fruits/plums_pears.jpg |test-multiple-fruits|\n+-------------------------------------------------------------------+--------------------+\nonly showing top 5 rows\n\nNone", "name": "stdout"}]}, {"metadata": {"id": "8f15b199"}, "id": "8f15b199", "cell_type": "markdown", "source": "#### 4.10.5.2 Pr\u00e9paration du mod\u00e8le"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "ec7c7165", "outputId": "e40d5467-1c02-48c1-acd9-b169c8618a98", "trusted": true}, "id": "ec7c7165", "cell_type": "code", "source": "model = MobileNetV2(weights='imagenet',\n include_top=True,\n input_shape=(224, 224, 3))", "execution_count": 8, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224.h5\n\r 8192/14536120 [..............................] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 16384/14536120 [..............................] - ETA: 58s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 49152/14536120 [..............................] - ETA: 46s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 81920/14536120 [..............................] - ETA: 43s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 147456/14536120 [..............................] - ETA: 30s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 212992/14536120 [..............................] - ETA: 24s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 327680/14536120 [..............................] - ETA: 18s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 475136/14536120 [..............................] - ETA: 13s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 753664/14536120 [>.............................] - ETA: 9s \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 1146880/14536120 [=>............................] - ETA: 6s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 1622016/14536120 [==>...........................] - ETA: 4s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 2146304/14536120 [===>..........................] - ETA: 3s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 2441216/14536120 [====>.........................] - ETA: 3s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 6365184/14536120 [============>.................] - ETA: 1s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 6832128/14536120 [=============>................] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 7127040/14536120 [=============>................] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r11091968/14536120 [=====================>........] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r11550720/14536120 [======================>.......] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r11845632/14536120 [=======================>......] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r14532608/14536120 [============================>.] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r14540800/14536120 [==============================] - 1s 0us/step", "name": "stdout"}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "1b9bc650", "outputId": "31cded8a-48d2-42e4-9659-2c0743dc5cde", "trusted": true}, "id": "1b9bc650", "cell_type": "code", "source": "new_model = Model(inputs=model.input,\n outputs=model.layers[-2].output)", "execution_count": 9, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "a0d497f2", "outputId": "97db4a3b-580d-407a-cdab-ed7fad4c88ee", "trusted": true}, "id": "a0d497f2", "cell_type": "code", "source": "brodcast_weights = sc.broadcast(new_model.get_weights())", "execution_count": 10, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "1bc0bf14", "outputId": "5689cf02-0166-441c-9efd-8b1ad47fd326", "trusted": true}, "id": "1bc0bf14", "cell_type": "code", "source": "new_model.summary()", "execution_count": 11, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "Model: \"model\"\n__________________________________________________________________________________________________\nLayer (type) Output Shape Param # Connected to \n==================================================================================================\ninput_1 (InputLayer) [(None, 224, 224, 3) 0 \n__________________________________________________________________________________________________\nConv1 (Conv2D) (None, 112, 112, 32) 864 input_1[0][0] \n__________________________________________________________________________________________________\nbn_Conv1 (BatchNormalization) (None, 112, 112, 32) 128 Conv1[0][0] \n__________________________________________________________________________________________________\nConv1_relu (ReLU) (None, 112, 112, 32) 0 bn_Conv1[0][0] \n__________________________________________________________________________________________________\nexpanded_conv_depthwise (Depthw (None, 112, 112, 32) 288 Conv1_relu[0][0] \n__________________________________________________________________________________________________\nexpanded_conv_depthwise_BN (Bat (None, 112, 112, 32) 128 expanded_conv_depthwise[0][0] \n__________________________________________________________________________________________________\nexpanded_conv_depthwise_relu (R (None, 112, 112, 32) 0 expanded_conv_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nexpanded_conv_project (Conv2D) (None, 112, 112, 16) 512 expanded_conv_depthwise_relu[0][0\n__________________________________________________________________________________________________\nexpanded_conv_project_BN (Batch (None, 112, 112, 16) 64 expanded_conv_project[0][0] \n__________________________________________________________________________________________________\nblock_1_expand (Conv2D) (None, 112, 112, 96) 1536 expanded_conv_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_1_expand_BN (BatchNormali (None, 112, 112, 96) 384 block_1_expand[0][0] \n__________________________________________________________________________________________________\nblock_1_expand_relu (ReLU) (None, 112, 112, 96) 0 block_1_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_1_pad (ZeroPadding2D) (None, 113, 113, 96) 0 block_1_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_1_depthwise (DepthwiseCon (None, 56, 56, 96) 864 block_1_pad[0][0] \n__________________________________________________________________________________________________\nblock_1_depthwise_BN (BatchNorm (None, 56, 56, 96) 384 block_1_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_1_depthwise_relu (ReLU) (None, 56, 56, 96) 0 block_1_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_1_project (Conv2D) (None, 56, 56, 24) 2304 block_1_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_1_project_BN (BatchNormal (None, 56, 56, 24) 96 block_1_project[0][0] \n__________________________________________________________________________________________________\nblock_2_expand (Conv2D) (None, 56, 56, 144) 3456 block_1_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_2_expand_BN (BatchNormali (None, 56, 56, 144) 576 block_2_expand[0][0] \n__________________________________________________________________________________________________\nblock_2_expand_relu (ReLU) (None, 56, 56, 144) 0 block_2_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_2_depthwise (DepthwiseCon (None, 56, 56, 144) 1296 block_2_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_2_depthwise_BN (BatchNorm (None, 56, 56, 144) 576 block_2_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_2_depthwise_relu (ReLU) (None, 56, 56, 144) 0 block_2_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_2_project (Conv2D) (None, 56, 56, 24) 3456 block_2_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_2_project_BN (BatchNormal (None, 56, 56, 24) 96 block_2_project[0][0] \n__________________________________________________________________________________________________\nblock_2_add (Add) (None, 56, 56, 24) 0 block_1_project_BN[0][0] \n block_2_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_3_expand (Conv2D) (None, 56, 56, 144) 3456 block_2_add[0][0] \n__________________________________________________________________________________________________\nblock_3_expand_BN (BatchNormali (None, 56, 56, 144) 576 block_3_expand[0][0] \n__________________________________________________________________________________________________\nblock_3_expand_relu (ReLU) (None, 56, 56, 144) 0 block_3_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_3_pad (ZeroPadding2D) (None, 57, 57, 144) 0 block_3_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_3_depthwise (DepthwiseCon (None, 28, 28, 144) 1296 block_3_pad[0][0] \n__________________________________________________________________________________________________\nblock_3_depthwise_BN (BatchNorm (None, 28, 28, 144) 576 block_3_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_3_depthwise_relu (ReLU) (None, 28, 28, 144) 0 block_3_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_3_project (Conv2D) (None, 28, 28, 32) 4608 block_3_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_3_project_BN (BatchNormal (None, 28, 28, 32) 128 block_3_project[0][0] \n__________________________________________________________________________________________________\nblock_4_expand (Conv2D) (None, 28, 28, 192) 6144 block_3_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_4_expand_BN (BatchNormali (None, 28, 28, 192) 768 block_4_expand[0][0] \n__________________________________________________________________________________________________\nblock_4_expand_relu (ReLU) (None, 28, 28, 192) 0 block_4_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_4_depthwise (DepthwiseCon (None, 28, 28, 192) 1728 block_4_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_4_depthwise_BN (BatchNorm (None, 28, 28, 192) 768 block_4_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_4_depthwise_relu (ReLU) (None, 28, 28, 192) 0 block_4_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_4_project (Conv2D) (None, 28, 28, 32) 6144 block_4_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_4_project_BN (BatchNormal (None, 28, 28, 32) 128 block_4_project[0][0] \n__________________________________________________________________________________________________\nblock_4_add (Add) (None, 28, 28, 32) 0 block_3_project_BN[0][0] \n block_4_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_5_expand (Conv2D) (None, 28, 28, 192) 6144 block_4_add[0][0] \n__________________________________________________________________________________________________\nblock_5_expand_BN (BatchNormali (None, 28, 28, 192) 768 block_5_expand[0][0] \n__________________________________________________________________________________________________\nblock_5_expand_relu (ReLU) (None, 28, 28, 192) 0 block_5_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_5_depthwise (DepthwiseCon (None, 28, 28, 192) 1728 block_5_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_5_depthwise_BN (BatchNorm (None, 28, 28, 192) 768 block_5_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_5_depthwise_relu (ReLU) (None, 28, 28, 192) 0 block_5_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_5_project (Conv2D) (None, 28, 28, 32) 6144 block_5_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_5_project_BN (BatchNormal (None, 28, 28, 32) 128 block_5_project[0][0] \n__________________________________________________________________________________________________\nblock_5_add (Add) (None, 28, 28, 32) 0 block_4_add[0][0] \n block_5_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_6_expand (Conv2D) (None, 28, 28, 192) 6144 block_5_add[0][0] \n__________________________________________________________________________________________________\nblock_6_expand_BN (BatchNormali (None, 28, 28, 192) 768 block_6_expand[0][0] \n__________________________________________________________________________________________________\nblock_6_expand_relu (ReLU) (None, 28, 28, 192) 0 block_6_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_6_pad (ZeroPadding2D) (None, 29, 29, 192) 0 block_6_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_6_depthwise (DepthwiseCon (None, 14, 14, 192) 1728 block_6_pad[0][0] \n__________________________________________________________________________________________________\nblock_6_depthwise_BN (BatchNorm (None, 14, 14, 192) 768 block_6_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_6_depthwise_relu (ReLU) (None, 14, 14, 192) 0 block_6_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_6_project (Conv2D) (None, 14, 14, 64) 12288 block_6_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_6_project_BN (BatchNormal (None, 14, 14, 64) 256 block_6_project[0][0] \n__________________________________________________________________________________________________\nblock_7_expand (Conv2D) (None, 14, 14, 384) 24576 block_6_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_7_expand_BN (BatchNormali (None, 14, 14, 384) 1536 block_7_expand[0][0] \n__________________________________________________________________________________________________\nblock_7_expand_relu (ReLU) (None, 14, 14, 384) 0 block_7_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_7_depthwise (DepthwiseCon (None, 14, 14, 384) 3456 block_7_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_7_depthwise_BN (BatchNorm (None, 14, 14, 384) 1536 block_7_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_7_depthwise_relu (ReLU) (None, 14, 14, 384) 0 block_7_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_7_project (Conv2D) (None, 14, 14, 64) 24576 block_7_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_7_project_BN (BatchNormal (None, 14, 14, 64) 256 block_7_project[0][0] \n__________________________________________________________________________________________________\nblock_7_add (Add) (None, 14, 14, 64) 0 block_6_project_BN[0][0] \n block_7_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_8_expand (Conv2D) (None, 14, 14, 384) 24576 block_7_add[0][0] \n__________________________________________________________________________________________________\nblock_8_expand_BN (BatchNormali (None, 14, 14, 384) 1536 block_8_expand[0][0] \n__________________________________________________________________________________________________\nblock_8_expand_relu (ReLU) (None, 14, 14, 384) 0 block_8_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_8_depthwise (DepthwiseCon (None, 14, 14, 384) 3456 block_8_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_8_depthwise_BN (BatchNorm (None, 14, 14, 384) 1536 block_8_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_8_depthwise_relu (ReLU) (None, 14, 14, 384) 0 block_8_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_8_project (Conv2D) (None, 14, 14, 64) 24576 block_8_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_8_project_BN (BatchNormal (None, 14, 14, 64) 256 block_8_project[0][0] \n__________________________________________________________________________________________________\nblock_8_add (Add) (None, 14, 14, 64) 0 block_7_add[0][0] \n block_8_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_9_expand (Conv2D) (None, 14, 14, 384) 24576 block_8_add[0][0] \n__________________________________________________________________________________________________\nblock_9_expand_BN (BatchNormali (None, 14, 14, 384) 1536 block_9_expand[0][0] \n__________________________________________________________________________________________________\nblock_9_expand_relu (ReLU) (None, 14, 14, 384) 0 block_9_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_9_depthwise (DepthwiseCon (None, 14, 14, 384) 3456 block_9_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_9_depthwise_BN (BatchNorm (None, 14, 14, 384) 1536 block_9_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_9_depthwise_relu (ReLU) (None, 14, 14, 384) 0 block_9_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_9_project (Conv2D) (None, 14, 14, 64) 24576 block_9_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_9_project_BN (BatchNormal (None, 14, 14, 64) 256 block_9_project[0][0] \n__________________________________________________________________________________________________\nblock_9_add (Add) (None, 14, 14, 64) 0 block_8_add[0][0] \n block_9_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_10_expand (Conv2D) (None, 14, 14, 384) 24576 block_9_add[0][0] \n__________________________________________________________________________________________________\nblock_10_expand_BN (BatchNormal (None, 14, 14, 384) 1536 block_10_expand[0][0] \n__________________________________________________________________________________________________\nblock_10_expand_relu (ReLU) (None, 14, 14, 384) 0 block_10_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_10_depthwise (DepthwiseCo (None, 14, 14, 384) 3456 block_10_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_10_depthwise_BN (BatchNor (None, 14, 14, 384) 1536 block_10_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_10_depthwise_relu (ReLU) (None, 14, 14, 384) 0 block_10_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_10_project (Conv2D) (None, 14, 14, 96) 36864 block_10_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_10_project_BN (BatchNorma (None, 14, 14, 96) 384 block_10_project[0][0] \n__________________________________________________________________________________________________\nblock_11_expand (Conv2D) (None, 14, 14, 576) 55296 block_10_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_11_expand_BN (BatchNormal (None, 14, 14, 576) 2304 block_11_expand[0][0] \n__________________________________________________________________________________________________\nblock_11_expand_relu (ReLU) (None, 14, 14, 576) 0 block_11_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_11_depthwise (DepthwiseCo (None, 14, 14, 576) 5184 block_11_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_11_depthwise_BN (BatchNor (None, 14, 14, 576) 2304 block_11_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_11_depthwise_relu (ReLU) (None, 14, 14, 576) 0 block_11_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_11_project (Conv2D) (None, 14, 14, 96) 55296 block_11_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_11_project_BN (BatchNorma (None, 14, 14, 96) 384 block_11_project[0][0] \n__________________________________________________________________________________________________\nblock_11_add (Add) (None, 14, 14, 96) 0 block_10_project_BN[0][0] \n block_11_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_12_expand (Conv2D) (None, 14, 14, 576) 55296 block_11_add[0][0] \n__________________________________________________________________________________________________\nblock_12_expand_BN (BatchNormal (None, 14, 14, 576) 2304 block_12_expand[0][0] \n__________________________________________________________________________________________________\nblock_12_expand_relu (ReLU) (None, 14, 14, 576) 0 block_12_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_12_depthwise (DepthwiseCo (None, 14, 14, 576) 5184 block_12_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_12_depthwise_BN (BatchNor (None, 14, 14, 576) 2304 block_12_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_12_depthwise_relu (ReLU) (None, 14, 14, 576) 0 block_12_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_12_project (Conv2D) (None, 14, 14, 96) 55296 block_12_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_12_project_BN (BatchNorma (None, 14, 14, 96) 384 block_12_project[0][0] \n__________________________________________________________________________________________________\nblock_12_add (Add) (None, 14, 14, 96) 0 block_11_add[0][0] \n block_12_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_13_expand (Conv2D) (None, 14, 14, 576) 55296 block_12_add[0][0] \n__________________________________________________________________________________________________\nblock_13_expand_BN (BatchNormal (None, 14, 14, 576) 2304 block_13_expand[0][0] \n__________________________________________________________________________________________________\nblock_13_expand_relu (ReLU) (None, 14, 14, 576) 0 block_13_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_13_pad (ZeroPadding2D) (None, 15, 15, 576) 0 block_13_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_13_depthwise (DepthwiseCo (None, 7, 7, 576) 5184 block_13_pad[0][0] \n__________________________________________________________________________________________________\nblock_13_depthwise_BN (BatchNor (None, 7, 7, 576) 2304 block_13_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_13_depthwise_relu (ReLU) (None, 7, 7, 576) 0 block_13_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_13_project (Conv2D) (None, 7, 7, 160) 92160 block_13_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_13_project_BN (BatchNorma (None, 7, 7, 160) 640 block_13_project[0][0] \n__________________________________________________________________________________________________\nblock_14_expand (Conv2D) (None, 7, 7, 960) 153600 block_13_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_14_expand_BN (BatchNormal (None, 7, 7, 960) 3840 block_14_expand[0][0] \n__________________________________________________________________________________________________\nblock_14_expand_relu (ReLU) (None, 7, 7, 960) 0 block_14_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_14_depthwise (DepthwiseCo (None, 7, 7, 960) 8640 block_14_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_14_depthwise_BN (BatchNor (None, 7, 7, 960) 3840 block_14_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_14_depthwise_relu (ReLU) (None, 7, 7, 960) 0 block_14_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_14_project (Conv2D) (None, 7, 7, 160) 153600 block_14_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_14_project_BN (BatchNorma (None, 7, 7, 160) 640 block_14_project[0][0] \n__________________________________________________________________________________________________\nblock_14_add (Add) (None, 7, 7, 160) 0 block_13_project_BN[0][0] \n block_14_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_15_expand (Conv2D) (None, 7, 7, 960) 153600 block_14_add[0][0] \n__________________________________________________________________________________________________\nblock_15_expand_BN (BatchNormal (None, 7, 7, 960) 3840 block_15_expand[0][0] \n__________________________________________________________________________________________________\nblock_15_expand_relu (ReLU) (None, 7, 7, 960) 0 block_15_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_15_depthwise (DepthwiseCo (None, 7, 7, 960) 8640 block_15_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_15_depthwise_BN (BatchNor (None, 7, 7, 960) 3840 block_15_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_15_depthwise_relu (ReLU) (None, 7, 7, 960) 0 block_15_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_15_project (Conv2D) (None, 7, 7, 160) 153600 block_15_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_15_project_BN (BatchNorma (None, 7, 7, 160) 640 block_15_project[0][0] \n__________________________________________________________________________________________________\nblock_15_add (Add) (None, 7, 7, 160) 0 block_14_add[0][0] \n block_15_project_BN[0][0] \n__________________________________________________________________________________________________\nblock_16_expand (Conv2D) (None, 7, 7, 960) 153600 block_15_add[0][0] \n__________________________________________________________________________________________________\nblock_16_expand_BN (BatchNormal (None, 7, 7, 960) 3840 block_16_expand[0][0] \n__________________________________________________________________________________________________\nblock_16_expand_relu (ReLU) (None, 7, 7, 960) 0 block_16_expand_BN[0][0] \n__________________________________________________________________________________________________\nblock_16_depthwise (DepthwiseCo (None, 7, 7, 960) 8640 block_16_expand_relu[0][0] \n__________________________________________________________________________________________________\nblock_16_depthwise_BN (BatchNor (None, 7, 7, 960) 3840 block_16_depthwise[0][0] \n__________________________________________________________________________________________________\nblock_16_depthwise_relu (ReLU) (None, 7, 7, 960) 0 block_16_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nblock_16_project (Conv2D) (None, 7, 7, 320) 307200 block_16_depthwise_relu[0][0] \n__________________________________________________________________________________________________\nblock_16_project_BN (BatchNorma (None, 7, 7, 320) 1280 block_16_project[0][0] \n__________________________________________________________________________________________________\nConv_1 (Conv2D) (None, 7, 7, 1280) 409600 block_16_project_BN[0][0] \n__________________________________________________________________________________________________\nConv_1_bn (BatchNormalization) (None, 7, 7, 1280) 5120 Conv_1[0][0] \n__________________________________________________________________________________________________\nout_relu (ReLU) (None, 7, 7, 1280) 0 Conv_1_bn[0][0] \n__________________________________________________________________________________________________\nglobal_average_pooling2d (Globa (None, 1280) 0 out_relu[0][0] \n==================================================================================================\nTotal params: 2,257,984\nTrainable params: 2,223,872\nNon-trainable params: 34,112\n__________________________________________________________________________________________________", "name": "stdout"}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "be8fe2b9", "outputId": "931f7e72-2d7a-41a0-e94b-be0ea51152c2", "trusted": true}, "id": "be8fe2b9", "cell_type": "code", "source": "def model_fn():\n \"\"\"\n Returns a MobileNetV2 model with top layer removed\n and broadcasted pretrained weights.\n \"\"\"\n model = MobileNetV2(weights=None, # There is no need to download pre-trained imagenet weights, as we already have broadcast_weights.\n include_top=True,\n input_shape=(224, 224, 3))\n for layer in model.layers:\n layer.trainable = False\n new_model = Model(inputs=model.input,\n outputs=model.layers[-2].output)\n new_model.set_weights(brodcast_weights.value)\n return new_model", "execution_count": 12, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"id": "c032f135"}, "id": "c032f135", "cell_type": "markdown", "source": "#### 4.10.5.3 D\u00e9finition du processus de chargement des images <br/> et application de leur featurisation \u00e0 travers l'utilisation de pandas UDF"}, {"metadata": {"scrolled": true, "colab": {"referenced_widgets": [""]}, "id": "933100cf", "outputId": "608e8aa2-3fc8-486c-a689-2188685ef546", "trusted": true}, "id": "933100cf", "cell_type": "code", "source": "def preprocess(content):\n \"\"\"\n Preprocesses raw image bytes for prediction.\n \"\"\"\n img = Image.open(io.BytesIO(content)).resize([224, 224])\n arr = img_to_array(img)\n return preprocess_input(arr)\n\ndef featurize_series(model, content_series):\n \"\"\"\n Featurize a pd.Series of raw images using the input model.\n :return: a pd.Series of image features\n \"\"\"\n input = np.stack(content_series.map(preprocess))\n preds = model.predict(input)\n # For some layers, output features will be multi-dimensional tensors.\n # We flatten the feature tensors to vectors for easier storage in Spark DataFrames.\n output = [p.flatten() for p in preds]\n return pd.Series(output)\n\n@pandas_udf('array<float>', PandasUDFType.SCALAR_ITER)\ndef featurize_udf(content_series_iter):\n '''\n This method is a Scalar Iterator pandas UDF wrapping our featurization function.\n The decorator specifies that this returns a Spark DataFrame column of type ArrayType(FloatType).\n\n :param content_series_iter: This argument is an iterator over batches of data, where each batch\n is a pandas Series of image data.\n '''\n # With Scalar Iterator pandas UDFs, we can load the model once and then re-use it\n # for multiple data batches. This amortizes the overhead of loading big models.\n model = model_fn()\n for content_series in content_series_iter:\n yield featurize_series(model, content_series)", "execution_count": 13, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/pandas/functions.py:392: UserWarning: In Python 3.6+ and Spark 3.0+, it is preferred to specify type hints for pandas UDF instead of specifying pandas UDF type which will be deprecated in the future releases. See SPARK-28264 for more details.", "name": "stdout"}]}, {"metadata": {"id": "f23206e8"}, "id": "f23206e8", "cell_type": "markdown", "source": "#### 4.10.5.4 Ex\u00e9cutions des actions d'extractions de features"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "22d760c2", "outputId": "ac986c6b-b06e-4bf9-957d-97380f2a66a7", "trusted": true}, "id": "22d760c2", "cell_type": "code", "source": "# spark.conf.set(\"spark.sql.execution.arrow.maxRecordsPerBatch\", \"1024\")", "execution_count": 14, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "5e07fd68", "outputId": "40ae6c77-a5ff-4815-c678-791af8a42e03", "trusted": true}, "id": "5e07fd68", "cell_type": "code", "source": "features_df = images.repartition(20).select(col(\"path\"),\n col(\"label\"),\n featurize_udf(\"content\").alias(\"features\")\n )", "execution_count": 18, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "06a930b3", "outputId": "9a5ece29-ae30-4667-e023-560cc97bdb06", "trusted": true}, "id": "06a930b3", "cell_type": "code", "source": "print(PATH_Result)", "execution_count": 19, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "s3://p11-data-fruits-grgmdmn/Results", "name": "stdout"}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "7c53ddd5", "outputId": "38eef86f-d8db-4e77-a807-74ae3a931bd9", "trusted": true}, "id": "7c53ddd5", "cell_type": "code", "source": "# On cherche \u00e0 r\u00e9duire la dimensionalit\u00e9 afin de gagner en espace de stockage ET profiter d'un temps d'entra\u00eenement r\u00e9duit\n# features_df.write.mode(\"overwrite\").parquet(PATH_Result)", "execution_count": 20, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"id": "uBJfafUL69kk"}, "id": "uBJfafUL69kk", "cell_type": "markdown", "source": "#### 4.10.5.5 Ex\u00e9cution d'une PCA distribu\u00e9e"}, {"metadata": {"id": "E2R78rIaDvsk"}, "id": "E2R78rIaDvsk", "cell_type": "markdown", "source": "#### Limitation\n\nIl est important de noter que la pr\u00e9sence d'un faible \u00e9chantillon (exemple minimal) va influer sur la variance capt\u00e9e par chacune des composantes principales. 100 composantes principales pour un \u00e9chantillon de test de 102 images va forc\u00e9ment math\u00e9matiquement capter presque 100% de la variance. Cela sera bien moins vrai pour un \u00e9chantillon de plus de 20 000 images. La variable `k_components` sera donc probablement \u00e0 ajuster, en particulier dans l'environnement cloud."}, {"metadata": {"id": "M4vcvo2C7Bwh", "trusted": true}, "id": "M4vcvo2C7Bwh", "cell_type": "code", "source": "k_components = 70\n\n# Convertir les features en format ML de Spark\ndef to_vector(features):\n return Vectors.dense(features)\n\nvector_udf = udf(to_vector, VectorUDT())\n\n# Pr\u00e9parer les donn\u00e9es pour la PCA\nfeatures_vector_df = features_df.withColumn(\"features_vector\", vector_udf(\"features\"))\n\n# Appliquer la PCA pour r\u00e9duire de 1280 \u00e0 k_components dimensions\npca = PCA(k=k_components, inputCol=\"features_vector\", outputCol=\"pca_features\")\npca_model = pca.fit(features_vector_df)\npca_result = pca_model.transform(features_vector_df)\n\n# Afficher la variance expliqu\u00e9e par les composantes principales\nexplained_variance = pca_model.explainedVariance\ntotal_variance = sum(explained_variance)\nprint(f\"Variance expliqu\u00e9e par les {k_components} premi\u00e8res composantes : {total_variance:.4f} ({total_variance*100:.2f}%)\")\nprint(f\"R\u00e9duction de dimensionnalit\u00e9 : 1280 \u2192 {k_components} dimensions\")\n\n# S\u00e9lectionner les colonnes finales\nfinal_df = pca_result.select(\"path\", \"label\", \"pca_features\")\n\n# Sauvegarder les r\u00e9sultats avec PCA sur S3\nPATH_Result_PCA = PATH + '/Results_PCA'\nfinal_df.write.mode(\"overwrite\").parquet(PATH_Result_PCA)\n\nprint(f\"R\u00e9sultats sauv\u00e9s sur S3 : {PATH_Result_PCA}\")", "execution_count": 21, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "Variance expliqu\u00e9e par les 70 premi\u00e8res composantes : 0.9994 (99.94%)\nR\u00e9duction de dimensionnalit\u00e9 : 1280 \u2192 70 dimensions\nR\u00e9sultats sauv\u00e9s sur S3 : s3://p11-data-fruits-grgmdmn/Results_PCA", "name": "stdout"}]}, {"metadata": {"id": "1fe01b72"}, "id": "1fe01b72", "cell_type": "markdown", "source": "### 4.10.6 Chargement des donn\u00e9es enregistr\u00e9es et validation du r\u00e9sultat"}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "db18a784", "outputId": "d9ba917b-4918-4b05-f2ee-5ac3707f3003", "trusted": true}, "id": "db18a784", "cell_type": "code", "source": "df_pca = pd.read_parquet(PATH_Result_PCA, engine='pyarrow')", "execution_count": 28, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "d750d2a8", "outputId": "8aa7c652-3bd8-4a8a-8c9b-df6885fd21bd", "trusted": true}, "id": "d750d2a8", "cell_type": "code", "source": "df_pca.head()", "execution_count": 29, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": " path ... pca_features\n0 s3://p11-data-fruits-grgmdmn/test-multiple-fru... ... {'type': 1, 'size': None, 'indices': None, 'va...\n1 s3://p11-data-fruits-grgmdmn/test-multiple-fru... ... {'type': 1, 'size': None, 'indices': None, 'va...\n2 s3://p11-data-fruits-grgmdmn/test-multiple-fru... ... {'type': 1, 'size': None, 'indices': None, 'va...\n3 s3://p11-data-fruits-grgmdmn/test-multiple-fru... ... {'type': 1, 'size': None, 'indices': None, 'va...\n4 s3://p11-data-fruits-grgmdmn/test-multiple-fru... ... {'type': 1, 'size': None, 'indices': None, 'va...\n\n[5 rows x 3 columns]", "name": "stdout"}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "b29205ff", "outputId": "631aa510-fbe5-4c0a-810b-4509bb682919", "trusted": true}, "id": "b29205ff", "cell_type": "code", "source": "# Explorer la structure du vecteur PCA\npca_vector = df_pca.loc[0,'pca_features']\nprint(f\"Type: {type(pca_vector)}\")\nprint(f\"Cl\u00e9s disponibles: {pca_vector.keys()}\")\n\nif 'values' in pca_vector:\n values = pca_vector['values']\n print(f\"Nombre de dimensions PCA: {len(values)}\")\n print(f\"Premi\u00e8res valeurs: {values[:5]}\")", "execution_count": 30, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "Type: <class 'dict'>\nCl\u00e9s disponibles: dict_keys(['type', 'size', 'indices', 'values'])\nNombre de dimensions PCA: 70\nPremi\u00e8res valeurs: [ 1.74324346e+01 3.79323925e-03 7.61737608e-01 1.10952834e+00\n -2.34927779e+00]", "name": "stdout"}]}, {"metadata": {"colab": {"referenced_widgets": [""]}, "id": "4fba6455", "outputId": "bce44513-d9eb-4d37-a78a-78a81913d43f", "trusted": true}, "id": "4fba6455", "cell_type": "code", "source": "df_pca.shape", "execution_count": 31, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "(102, 3)", "name": "stdout"}]}, {"metadata": {"scrolled": true, "trusted": true}, "id": "fe38d3ee", "cell_type": "code", "source": "df_pca[\"pca_features\"].loc[0]['values'].shape", "execution_count": 32, "outputs": [{"output_type": "display_data", "data": {"text/plain": "FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),\u2026", "application/vnd.jupyter.widget-view+json": {"version_major": 2, "version_minor": 0, "model_id": ""}}, "metadata": {}}, {"output_type": "stream", "text": "(70,)", "name": "stdout"}]}, {"metadata": {"id": "72974aab"}, "id": "72974aab", "cell_type": "markdown", "source": "<u>On peut \u00e9galement constater la pr\u00e9sence des fichiers <br />\n au format \"**parquet**\" sur le **serveur S3**</u> :\n\n![Affichage des r\u00e9sultats sur S3](img/S3_Results.png)\n\n## 4.11 Suivi de l'avancement des t\u00e2ches avec le Serveur d'Historique Spark\n\nIl est possible de voir l'avancement des t\u00e2ches en cours <br />\navec le **serveur d'historique Spark**.\n\n![Acc\u00e8s au serveur d'historique spark](img/EMR_serveur_historique_spark_acces.png)\n\n**Il est \u00e9galement possible de revenir et d'\u00e9tudier les t\u00e2ches <br />\nqui ont \u00e9t\u00e9 r\u00e9alis\u00e9, afin de debugger, optimiser les futurs <br />\nt\u00e2ches \u00e0 r\u00e9aliser.**\n\n<u>Lorsque la commande \"**features_df.write.mode(\"overwrite\").parquet(PATH_Result)**\" <br />\n\u00e9tait en cours, nous pouvions observer son \u00e9tat d'avancement</u> :\n\n![Progression execution script](img/EMR_jupyterhub_avancement.png)\n\n<u>Le **serveur d'historique Spark** nous permet une vision beaucoup plus pr\u00e9cise <br />\nde l'ex\u00e9cution des diff\u00e9rentes t\u00e2che sur les diff\u00e9rentes machines du cluster</u> :\n\n![Suivi des t\u00e2ches spark](img/EMR_SHSpark_01.png)\n\nOn peut \u00e9galement constater que notre cluster de calcul a mis <br />\nun tout petit peu **moins de 8 minutes** pour traiter les **22 688 images**.\n\n![Temps de traitement](img/EMR_SHSpark_02.png)\n"}, {"metadata": {"id": "pgzf2-MtIcB_"}, "id": "pgzf2-MtIcB_", "cell_type": "markdown", "source": "## 4.12 R\u00e9siliation de l'instance EMR\n\nNotre travail est maintenant termin\u00e9. <br />\nLe cluster de machines EMR est **factur\u00e9 \u00e0 la demande**, <br />\net nous continuons d'\u00eatre factur\u00e9 m\u00eame lorsque <br />\nles machines sont au repos.<br />\nPour **optimiser la facturation**, il nous faut <br />\nmaintenant **r\u00e9silier le cluster**.\n\n<u>Je r\u00e9alise cette commande depuis l'interface AWS</u> :\n\n1. Commencez par **d\u00e9sactiver le tunnel ssh dans FoxyProxy** pour \u00e9viter des probl\u00e8mes de **timeout**.\n![D\u00e9sactivation de FoxyProxy](img/EMR_foxyproxy_desactivation.png)\n2. Cliquez sur \"**R\u00e9silier**\"\n![Cliquez sur R\u00e9silier](img/EMR_resiliation_01.png)\n3. Confirmez la r\u00e9siliation\n![Confirmez la r\u00e9siliation](img/EMR_resiliation_02.png)\n4. La r\u00e9siliation prend environ **1 minute**\n![R\u00e9siliation en cours](img/EMR_resiliation_03.png)\n5. La r\u00e9siliation est effectu\u00e9e\n![R\u00e9siliation termin\u00e9e](img/EMR_resiliation_04.png)"}, {"metadata": {"id": "hg6V5MxgIija"}, "id": "hg6V5MxgIija", "cell_type": "markdown", "source": "## 4.13 Cloner le serveur EMR (si besoin)\n\nSi nous devons de nouveau ex\u00e9cuter notre notebook dans les m\u00eames conditions, <br />\nil nous suffit de **cloner notre cluster** et ainsi en obtenir une copie fonctionnelle <br />\nsous 15/20 minutes, le temps de son instanciation.\n\n<u>Pour cela deux solutions</u> :\n1. <u>Depuis l'interface AWS</u> :\n 1. Cliquez sur \"**Cloner**\"\n ![Cloner un cluster](img/EMR_cloner_01.png)\n 2. Dans notre cas nous ne souhaitons pas inclure d'\u00e9tapes\n ![Ne pas inclure d'\u00e9tapes](img/EMR_cloner_02.png)\n 3. La configuration du cluster est recr\u00e9\u00e9e \u00e0 l\u2019identique. <br />\n On peut revenir sur les diff\u00e9rentes \u00e9tapes si on souhaite apporter des modifications<br />\n Quand tout est pr\u00eat, cliquez sur \"**Cr\u00e9er un cluster**\"\n ![V\u00e9rification/Modification/Cr\u00e9er un cluster](img/EMR_cloner_03.png)\n2. <u>En ligne de commande</u> (avec AWS CLI d'install\u00e9 et de configur\u00e9 et en s'assurant <br />\n de s'attribuer les droits n\u00e9cessaires sur le compte AMI utilis\u00e9)\n 1. Cliquez sur \"**Exporter AWS CLI**\"\n ![Exporter AWS CLI](img/EMR_cloner_cli_01.png)\n 2. Copier/Coller la commande **depuis un terminal**\n ![Copier Coller Commande](img/EMR_cloner_cli_02.png)"}, {"metadata": {"id": "b22d65bf"}, "id": "b22d65bf", "cell_type": "markdown", "source": "\n## 4.14 Arborescence du serveur S3 \u00e0 la fin du projet\n\n<u>Pour information, voici **l'arborescence compl\u00e8te de mon bucket S3 p11-data-fruits-grgmdmn** \u00e0 la fin du projet</u> : <br />\n*Par soucis de lisibilit\u00e9, je ne liste pas les 131 sous dossiers du r\u00e9pertoire \"Test\"*\n\n2025-09-29 15:28:30 0 Results_PCA/_SUCCESS\n\n2025-09-29 15:28:19 5318 Results_PCA/part-00000-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:19 4713 Results_PCA/part-00001-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:19 4663 Results_PCA/part-00002-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:19 5212 Results_PCA/part-00003-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:21 5224 Results_PCA/part-00004-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:21 4634 Results_PCA/part-00005-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:21 5167 Results_PCA/part-00006-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:21 5174 Results_PCA/part-00007-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:24 5774 Results_PCA/part-00008-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:24 6326 Results_PCA/part-00009-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:24 5773 Results_PCA/part-00010-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:24 5788 Results_PCA/part-00011-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:26 5156 Results_PCA/part-00012-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:27 5224 Results_PCA/part-00013-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:27 5292 Results_PCA/part-00014-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:27 5261 Results_PCA/part-00015-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:29 5197 Results_PCA/part-00016-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:29 5162 Results_PCA/part-00017-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:29 5179 Results_PCA/part-00018-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet\n\n2025-09-29 15:28:30 5170 Results_PCA/part-00019-22bc6605-c69c-4bae-ad9c-d0394efb4a27-c000.snappy.parquet \n\n2025-09-25 16:34:47 219 bootstrap-emr.sh\n\n2025-09-22 16:40:56 135 jupyter-s3-conf.json\n\n2025-09-25 16:17:16 0 jupyter/jovyan/.s3keep\n\n2025-09-25 16:41:43 466644 jupyter/jovyan/P11_Notebook_Linux_EMR_PySpark_V1.1.ipynb\n\n2025-09-22 16:37:50 1402274 test-multiple-fruits/Bananas(lady_finger)1.jpg\n\n2025-09-22 16:37:48 1565087 test-multiple-fruits/Bananas(lady_finger)2.jpg\n\n2025-09-22 16:37:49 1743367 test-multiple-fruits/Bananas(lady_finger)3.jpg\n\n2025-09-22 16:37:49 1854256 test-multiple-fruits/Bananas(lady_finger)4.jpg\n\n2025-09-22 16:37:50 1478502 test-multiple-fruits/Bananas(lady_finger)5.jpg\n\n2025-09-22 16:37:50 2671709 test-multiple-fruits/apple.jpg\n\n2025-09-22 16:37:50 2282152 test-multiple-fruits/apple_apricot_peach_peach(flat)_pomegranate_pear_plum.jpg \n\n2025-09-22 16:37:50 1890424 test-multiple-fruits/apple_apricot_peach_peach(flat)_pomegranate_pear_plum_2.jpg \n\n2025-09-22 16:37:50 2309053 test-multiple-fruits/apple_apricot_peach_peach(flat)_pomegranate_pear_plum_3.jpg\n\n2025-09-22 16:37:50 3704053 test-multiple-fruits/apple_grape.jpg\n\n2025-09-22 16:37:50 2980435 test-multiple-fruits/apple_grape2.jpg\n\n2025-09-22 16:37:50 4640120 test-multiple-fruits/apple_pear.jpg\n\n2025-09-22 16:37:49 4663157 test-multiple-fruits/apples1.jpg\n\n2025-09-22 16:37:50 5248448 test-multiple-fruits/apples2.jpg\n\n2025-09-22 16:38:06 5138167 test-multiple-fruits/apples3.jpg\n\n2025-09-22 16:38:06 5612220 test-multiple-fruits/apples4.jpg\n\n2025-09-22 16:38:06 4144168 test-multiple-fruits/apples_peaches1.jpg\n\n2025-09-22 16:38:06 3983349 test-multiple-fruits/apples_peaches2.jpg\n\n2025-09-22 16:37:51 4107025 test-multiple-fruits/apples_pears.jpg\n\n2025-09-22 16:37:51 560855 test-multiple-fruits/cactus fruits.jpg\n\n2025-09-22 16:37:51 3642803 test-multiple-fruits/cherries(rainier)1.jpg\n\n2025-09-22 16:37:51 2093916 test-multiple-fruits/cherries(rainier)2.jpg\n\n2025-09-22 16:37:51 6457796 test-multiple-fruits/cherries.jpg\n\n2025-09-22 16:37:51 3840277 test-multiple-fruits/cherries2.jpg\n\n2025-09-22 16:37:52 3891655 test-multiple-fruits/cherries3.jpg\n\n2025-09-22 16:37:52 3027964 test-multiple-fruits/cherries4.jpg\n\n2025-09-22 16:37:52 3512478 test-multiple-fruits/cherries5.jpg\n\n2025-09-22 16:37:52 4074333 test-multiple-fruits/cherries6.jpg\n\n2025-09-22 16:37:52 2909435 test-multiple-fruits/cherries7.jpg\n\n2025-09-22 16:37:53 2933142 test-multiple-fruits/cherries8.jpg\n\n2025-09-22 16:37:53 3886519 test-multiple-fruits/cherries_strawberries1.jpg\n\n2025-09-22 16:37:53 4649575 test-multiple-fruits/cherries_strawberries2.jpg\n\n2025-09-22 16:37:53 2085744 test-multiple-fruits/cherries_wax1.jpg\n\n2025-09-22 16:37:54 5045853 test-multiple-fruits/cherries_wax2.jpg\n\n2025-09-22 16:37:54 5238999 test-multiple-fruits/cherries_wax3.jpg\n\n2025-09-22 16:37:54 5091251 test-multiple-fruits/cherries_wax4.jpg\n\n2025-09-22 16:37:54 3915070 test-multiple-fruits/cherries_wax5.jpg\n\n2025-09-22 16:37:54 4239368 test-multiple-fruits/cherries_wax6.jpg\n\n2025-09-22 16:37:54 2196420 test-multiple-fruits/cherries_wax7.jpg\n\n2025-09-22 16:37:54 4884999 test-multiple-fruits/cherry2.jpg\n\n2025-09-22 16:37:55 2909435 test-multiple-fruits/cherry3.jpg\n\n2025-09-22 16:37:55 3886519 test-multiple-fruits/cherry_strawberries.jpg\n\n2025-09-22 16:37:55 4649575 test-multiple-fruits/cherry_strawberries2.jpg\n\n2025-09-22 16:37:55 2700441 test-multiple-fruits/chestnut1.jpg\n\n2025-09-22 16:37:55 2233752 test-multiple-fruits/chestnut3.jpg\n\n2025-09-22 16:37:56 4305631 test-multiple-fruits/cocos.jpg\n\n2025-09-22 16:37:56 3630892 test-multiple-fruits/cocos_kiwi_orange_dates_salak_plum_tamarilo_maracuja.jpg \n\n2025-09-22 16:37:56 3580646 test-multiple-fruits/cocos_kiwi_orange_dates_salak_plum_tamarilo_maracuja2.jpg \n\n2025-09-22 16:37:56 2759163 test-multiple-fruits/cocos_kiwi_orange_dates_salak_plum_tamarilo_maracuja3.jpg \n\n2025-09-22 16:37:56 4300685 test-multiple-fruits/dates.jpg\n\n2025-09-22 16:37:56 3977020 test-multiple-fruits/grape_pear_mandarine.jpg\n\n2025-09-22 16:37:56 4687081 test-multiple-fruits/grape_pear_mandarine2.jpg\n\n2025-09-22 16:37:57 3430802 test-multiple-fruits/huckleberry.jpg\n\n2025-09-22 16:37:57 2768816 test-multiple-fruits/kachi.jpg\n\n2025-09-22 16:37:57 4771421 test-multiple-fruits/kiwi.jpg\n\n2025-09-22 16:37:57 2970459 test-multiple-fruits/limes.jpg\n\n2025-09-22 16:37:58 1690761 test-multiple-fruits/lychee.jpg\n\n2025-09-22 16:37:58 1781700 test-multiple-fruits/mango.jpg\n\n2025-09-22 16:37:58 957490 test-multiple-fruits/mangos1.jpg\n\n2025-09-22 16:37:58 3997008 test-multiple-fruits/mangos2.jpg\n\n2025-09-22 16:37:58 744345 test-multiple-fruits/mangos3.jpg\n\n2025-09-22 16:37:58 1781124 test-multiple-fruits/mangos_bananas(lady_finger).jpg\n\n2025-09-22 16:37:58 4683973 test-multiple-fruits/peaches.jpg\n\n2025-09-22 16:37:58 4340231 test-multiple-fruits/pear.jpg\n\n2025-09-22 16:37:59 4476078 test-multiple-fruits/pears1.jpg\n\n2025-09-22 16:37:59 5044001 test-multiple-fruits/pears2.jpg\n\n2025-09-22 16:37:59 2196773 test-multiple-fruits/physalis1.jpg\n\n2025-09-22 16:37:59 4747944 test-multiple-fruits/physalis2.jpg\n\n2025-09-22 16:37:59 5443640 test-multiple-fruits/plums_pears.jpg\n\n2025-09-22 16:37:59 3532179 test-multiple-fruits/pomegranate.jpg\n\n2025-09-22 16:38:00 3557576 test-multiple-fruits/pomegranate2.jpg\n\n2025-09-22 16:38:00 3845675 test-multiple-fruits/raspberries1.jpg\n\n2025-09-22 16:38:00 3708562 test-multiple-fruits/raspberries10.jpg\n\n2025-09-22 16:38:00 4272462 test-multiple-fruits/raspberries11.jpg\n\n2025-09-22 16:38:00 2939020 test-multiple-fruits/raspberries12.jpg\n\n2025-09-22 16:38:01 4051706 test-multiple-fruits/raspberries2.jpg\n\n2025-09-22 16:38:01 3839989 test-multiple-fruits/raspberries3.jpg\n\n2025-09-22 16:38:01 4013902 test-multiple-fruits/raspberries4.jpg\n\n2025-09-22 16:38:01 3642003 test-multiple-fruits/raspberries5.jpg\n\n2025-09-22 16:38:01 5307375 test-multiple-fruits/raspberries6.jpg\n\n2025-09-22 16:38:01 3390907 test-multiple-fruits/raspberries7.jpg\n\n2025-09-22 16:38:01 3541222 test-multiple-fruits/raspberries8.jpg\n\n2025-09-22 16:38:02 3378273 test-multiple-fruits/raspberries9.jpg\n\n2025-09-22 16:38:02 4289161 test-multiple-fruits/raspberry.jpg\n\n2025-09-22 16:38:02 3839989 test-multiple-fruits/raspberry2.jpg\n\n2025-09-22 16:38:03 4013902 test-multiple-fruits/raspberry3.jpg\n\n2025-09-22 16:38:03 5307375 test-multiple-fruits/raspberry4.jpg\n\n2025-09-22 16:38:03 3541222 test-multiple-fruits/raspberry5.jpg\n\n2025-09-22 16:38:03 5325447 test-multiple-fruits/raspberry_apple.jpg\n\n2025-09-22 16:38:03 3317624 test-multiple-fruits/salak.jpg\n\n2025-09-22 16:38:03 3638398 test-multiple-fruits/salak2.jpg\n\n2025-09-22 16:38:03 5704339 test-multiple-fruits/strawberries.jpg\n\n2025-09-22 16:38:04 4990351 test-multiple-fruits/strawberries2.jpg\n\n2025-09-22 16:38:04 3210308 test-multiple-fruits/strawberries3.jpg\n\n2025-09-22 16:38:04 4453982 test-multiple-fruits/strawberries4.jpg\n\n2025-09-22 16:38:04 5601970 test-multiple-fruits/strawberries5.jpg\n\n2025-09-22 16:38:04 2918414 test-multiple-fruits/tangelo.jpg\n\n2025-09-22 16:38:05 4358384 test-multiple-fruits/tomatoes1.jpg\n\n2025-09-22 16:38:05 4489489 test-multiple-fruits/tomatoes2.jpg\n\n2025-09-22 16:38:05 4588272 test-multiple-fruits/tomatoes3.jpg\n\n2025-09-22 16:38:06 4211396 test-multiple-fruits/tomatoes4.jpg\n\n2025-09-22 16:38:06 5146765 test-multiple-fruits/tomatoes5.jpg\n\n\n\n"}, {"metadata": {"id": "4eba46f9"}, "id": "4eba46f9", "cell_type": "markdown", "source": "# 5. Conclusion\n\nNous avons r\u00e9alis\u00e9 ce projet **en deux temps** en tenant <br />\ncompte des contraintes qui nous ont \u00e9t\u00e9 impos\u00e9es.\n\nNous avons **dans un premier temps d\u00e9velopp\u00e9 notre solution en local** <br />\nsur une machine virtuelle dans un environnement Linux Ubuntu.\n\nLa <u>premi\u00e8re phase</u> a consist\u00e9 \u00e0 **installer l'environnement de travail Spark**. <br />\n**Spark** a un param\u00e8tre qui nous permet de travaill\u00e9 en local et nous permet <br />\nainsi de **simuler du calcul partag\u00e9** en consid\u00e9rant <br />\n**chaque c\u0153ur d'un processeur comme un worker ind\u00e9pendant**.<br />\nNous avons travaill\u00e9 sur un plus **petit jeu de donn\u00e9e**, l'id\u00e9e \u00e9tait <br />\nsimplement de **valider le bon fonctionnement de la solution**.\n\nNous avons fait le choix de r\u00e9aliser du **transfert learning** <br />\n\u00e0 partir du model **MobileNetV2**.<br />\nCe mod\u00e8le a \u00e9t\u00e9 retenu pour sa **l\u00e9g\u00e8ret\u00e9** et sa **rapidit\u00e9 d'ex\u00e9cution** <br />\nainsi que pour la **faible dimension de son vecteur en sortie**.\n\nLes r\u00e9sultats ont \u00e9t\u00e9 enregistr\u00e9s sur disque en plusieurs <br />\npartitions au format \"**parquet**\".\n\n<u>**La solution a parfaitement fonctionn\u00e9 en mode local**</u>.\n\nLa <u>deuxi\u00e8me phase</u> a consist\u00e9 \u00e0 cr\u00e9er un **r\u00e9el cluster de calculs**. <br />\nL'objectif \u00e9tait de pouvoir **anticiper une future augmentation de la charge de travail**.\n\nLe meilleur choix retenu a \u00e9t\u00e9 l'utilisation du prestataire de services **Amazon Web Services** <br />\nqui nous permet de **louer \u00e0 la demande de la puissance de calculs**, <br />\npour un **co\u00fbt tout \u00e0 fait acceptable**.<br />\nCe service se nomme **EC2** et se classe parmi les offres **Infrastructure As A Service** (IAAS).\n\nNous sommes allez plus loin en utilisant un service de plus <br />\nhaut niveau (**Plateforme As A Service** PAAS)<br />\nen utilisant le service **EMR** qui nous permet d'un seul coup <br />\nd'**instancier plusieurs serveur (un cluster)** sur lesquels <br />\nnous avons pu demander l'installation et la configuration de plusieurs<br />\nprogrammes et librairies n\u00e9cessaires \u00e0 notre projet comme **Spark**, <br />\n**Hadoop**, **JupyterHub** ainsi que la librairie **TensorFlow**.\n\nEn plus d'\u00eatre plus **rapide et efficace \u00e0 mettre en place**, nous avons <br />\nla **certitude du bon fonctionnement de la solution**, celle-ci ayant \u00e9t\u00e9 <br />\npr\u00e9alablement valid\u00e9 par les ing\u00e9nieurs d'Amazon.\n\nNous avons \u00e9galement pu installer, sans difficult\u00e9, **les packages <br />\nn\u00e9cessaires sur l'ensembles des machines du cluster**.\n\nEnfin, avec tr\u00e8s peu de modification, et plus simplement encore, <br />\nnous avons pu **ex\u00e9cuter notre notebook comme nous l'avions fait localement**.<br />\nNous avons cette fois-ci ex\u00e9cut\u00e9 le traitement sur **l'ensemble des images de notre dossier \"Test\"**.\n\nNous avons opt\u00e9 pour le service **Amazon S3** pour **stocker les donn\u00e9es de notre projet**. <br />\nS3 offre, pour un faible co\u00fbt, toutes les conditions dont nous avons besoin pour stocker <br />\net exploiter de mani\u00e8re efficace nos donn\u00e9es.<br />\nL'espace allou\u00e9 est potentiellement **illimit\u00e9**, mais les co\u00fbts seront fonction de l'espace utilis\u00e9.\n\nIl nous sera **facile de faire face \u00e0 une mont\u00e9 de la charge de travail** en **redimensionnant** <br />\nsimplement notre cluster de machines (horizontalement et/ou verticalement au besoin), <br />\nles co\u00fbts augmenteront en cons\u00e9quence mais resteront nettement inf\u00e9rieurs aux co\u00fbts engendr\u00e9s <br />\npar l'achat de mat\u00e9riels ou par la location de serveurs d\u00e9di\u00e9s."}], "metadata": {"kernelspec": {"name": "pysparkkernel", "display_name": "PySpark", "language": "python"}, "language_info": {"name": "pyspark", "mimetype": "text/x-python", "codemirror_mode": {"name": "python", "version": 3}, "file_extension": ".py", "pygments_lexer": "python3"}, "toc": {"base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {"height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "432.4px"}, "toc_section_display": true, "toc_window_display": true}, "colab": {"provenance": [], "toc_visible": true}}, "nbformat": 4, "nbformat_minor": 5}