{ "cells": [ { "cell_type": "markdown", "id": "6H0l2FKpZzrM", "metadata": { "id": "6H0l2FKpZzrM" }, "source": [ "# Notebook CNN architecture\n", "\n", "A.A. 2022-2023 - HUMAN DATA ANALYTICS\n", "\n", "Authors:\n", "* Mattia Brocco\n", "* Brenda Eloisa Tellez Juarez" ] }, { "cell_type": "code", "execution_count": 1, "id": "cqWaiUYsRCJ9", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cqWaiUYsRCJ9", "outputId": "6dc9094c-3412-4912-d035-127cea84f8ec" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mounted at /content/drive\n", "/content/drive/MyDrive/Environmental-sounds-UNIPD-2022\n" ] } ], "source": [ "from google.colab import drive\n", "drive.mount(\"/content/drive\")\n", "\n", "#%cd /content/drive/MyDrive/Environmental-sounds-UNIPD-2022" ] }, { "cell_type": "code", "execution_count": 2, "id": "592da296", "metadata": { "ExecuteTime": { "end_time": "2023-01-02T15:26:41.488268Z", "start_time": "2023-01-02T15:26:24.186181Z" }, "id": "592da296" }, "outputs": [], "source": [ "import os\n", "import sys\n", "import torch\n", "import librosa\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "from tqdm import tqdm\n", "import tensorflow as tf\n", "from scipy.io import wavfile\n", "from tensorflow import keras\n", "import matplotlib.pyplot as plt\n", "from sklearn.metrics import classification_report\n", "\n", "import evaluation\n", "import CNN_support as cnns\n", "from gng import GrowingNeuralGas\n", "\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 3, "id": "a115cec6", "metadata": { "ExecuteTime": { "end_time": "2023-01-02T15:26:41.828237Z", "start_time": "2023-01-02T15:26:41.491121Z" }, "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "a115cec6", "outputId": "490a124a-0808-4566-c6c8-a63dded09b12" }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenamefoldtargetcategoryesc10src_filetake
01-100032-A-0.wav10dogTrue100032A
11-100038-A-14.wav114chirping_birdsFalse100038A
21-100210-A-36.wav136vacuum_cleanerFalse100210A
31-100210-B-36.wav136vacuum_cleanerFalse100210B
41-101296-A-19.wav119thunderstormFalse101296A
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ], "text/plain": [ " filename fold target category esc10 src_file take\n", "0 1-100032-A-0.wav 1 0 dog True 100032 A\n", "1 1-100038-A-14.wav 1 14 chirping_birds False 100038 A\n", "2 1-100210-A-36.wav 1 36 vacuum_cleaner False 100210 A\n", "3 1-100210-B-36.wav 1 36 vacuum_cleaner False 100210 B\n", "4 1-101296-A-19.wav 1 19 thunderstorm False 101296 A" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_csv('./data/meta/esc50.csv')\n", "data.head()" ] }, { "cell_type": "markdown", "id": "976f9358", "metadata": { "id": "976f9358" }, "source": [ "## Architectural design\n", "First of all data is imported (due to storage requirements the data has already been stored with the train-validation-test split). The latter split is performed via `sklearn.model_selection.train_test_split` with 80% of data used for training, 10% for validation and 10% for test purposes. The method is implemented with `random_state = 42` (common to all architectures in order to provide to all the algorithms the same exact examples)." ] }, { "cell_type": "code", "execution_count": 4, "id": "571Lw3LPBwxM", "metadata": { "id": "571Lw3LPBwxM" }, "outputs": [], "source": [ "BATCH_SIZE1 = 100" ] }, { "cell_type": "code", "execution_count": 5, "id": "Ny1HO7yLvvJo", "metadata": { "id": "Ny1HO7yLvvJo" }, "outputs": [], "source": [ "X_train = pd.read_parquet(\".//data/X_train_CNN_60x431x3_7times.parquet\")\n", "X_valid = pd.read_parquet(\".//data/X_valid_CNN_60x431x3_7times.parquet\")\n", "X_test = pd.read_parquet(\".//data/X_test_CNN_60x431x3_7times.parquet\")\n", "y = pd.read_parquet(\".//data/y_CNN_7times.parquet\")\n", "y[\"0\"] = y[\"0\"].astype(int)\n", "\n", "X_train = X_train.values.reshape(len(X_train), 60, 431, 3)\n", "X_valid = X_valid.values.reshape(len(X_valid), 60, 431, 3)\n", "X_test = X_test.values.reshape(len(X_test), 60, 431, 3)\n", "\n", "y_train = y.values[:len(X_train)]\n", "y_valid = y.values[len(X_train):len(X_train) + len(X_valid)]\n", "y_test = y.values[len(X_train) + len(X_valid):]" ] }, { "cell_type": "code", "execution_count": 6, "id": "LsKnofH5n8P3", "metadata": { "id": "LsKnofH5n8P3" }, "outputs": [], "source": [ "# Identify and select the TPU\n", "try:\n", " TF_MASTER = 'grpc://{}'.format(os.environ['COLAB_TPU_ADDR'])\n", "\n", " tpu = tf.distribute.cluster_resolver.TPUClusterResolver(TF_MASTER) # TPU detection\n", " tf.config.experimental_connect_to_cluster(tpu)\n", " tf.tpu.experimental.initialize_tpu_system(tpu)\n", " tpu_strategy = tf.distribute.TPUStrategy(tpu)\n", "except:\n", " print(\"TPU not found\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "hkQ1bOISnoXp", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hkQ1bOISnoXp", "outputId": "20d0b5d7-50d1-4257-9814-1ccb2df421f7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"M0\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " conv2d (Conv2D) (None, 60, 431, 30) 6510 \n", " \n", " max_pooling2d (MaxPooling2D (None, 58, 143, 30) 0 \n", " ) \n", " \n", " dropout (Dropout) (None, 58, 143, 30) 0 \n", " \n", " conv2d_1 (Conv2D) (None, 58, 143, 30) 2730 \n", " \n", " max_pooling2d_1 (MaxPooling (None, 58, 47, 30) 0 \n", " 2D) \n", " \n", " conv2d_2 (Conv2D) (None, 58, 47, 10) 910 \n", " \n", " max_pooling2d_2 (MaxPooling (None, 58, 15, 10) 0 \n", " 2D) \n", " \n", " flatten (Flatten) (None, 8700) 0 \n", " \n", " dense (Dense) (None, 500) 4350500 \n", " \n", " dropout_1 (Dropout) (None, 500) 0 \n", " \n", " dense_1 (Dense) (None, 50) 25050 \n", " \n", "=================================================================\n", "Total params: 4,385,700\n", "Trainable params: 4,385,700\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n" ] } ], "source": [ "with tpu_strategy.scope():\n", " # creating the model in the TPUStrategy\n", " # scope means we will train the model on the TPU\n", " model0 = keras.models.Sequential([keras.layers.Conv2D(filters = 30, kernel_size = [12, 6],\n", " padding = \"same\", activation = \"relu\",\n", " input_shape = [60, 431, 3]),\n", " keras.layers.MaxPool2D(pool_size = (3, 3), strides = (1, 3)),\n", " keras.layers.Dropout(rate = .5),\n", " keras.layers.Conv2D(filters = 30, kernel_size = (1, 3),\n", " padding = \"same\", activation = \"relu\"),\n", " keras.layers.MaxPool2D(pool_size = (1, 3), strides = (1, 3)),\n", " keras.layers.Conv2D(filters = 10, kernel_size = (1, 3),\n", " padding = \"same\", activation = \"relu\"),\n", " keras.layers.MaxPool2D(pool_size = (1, 3), strides = (1, 3)),\n", " keras.layers.Flatten(),\n", " keras.layers.Dense(500, activation = \"relu\"),\n", " keras.layers.Dropout(rate = .5),\n", " keras.layers.Dense(50, activation = \"softmax\") ],\n", " name = \"M0\")\n", "\n", " model0.compile(loss = \"sparse_categorical_crossentropy\",\n", " metrics = [\"accuracy\"],\n", " optimizer = keras.optimizers.Adam(learning_rate = 1e-4))\n", "\n", "print(model0.summary())" ] }, { "cell_type": "markdown", "id": "02223617", "metadata": {}, "source": [ "In the following cell the training of the CNN is provided. This is done by splitting the training set in 4 separate datasets with the same size (2800 examples)." ] }, { "cell_type": "code", "execution_count": 8, "id": "QcBFuFKfPOM9", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "QcBFuFKfPOM9", "outputId": "c78ee9a2-8ad2-4ba5-f0ee-9ef7262e7bd5" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 4/4 [13:47<00:00, 206.96s/it]\n" ] } ], "source": [ "split_train = []\n", "for j in tqdm(range(4)):\n", " j_start = int(j*(len(X_train)/4))\n", " j_stop = int((j+1)*(len(X_train)/4))\n", " hist_j = model0.fit(X_train[j_start:j_stop], y_train[j_start:j_stop],\n", " epochs = 200, batch_size = BATCH_SIZE1,\n", " validation_data = (X_valid, y_valid),\n", " verbose = 0,\n", " callbacks = [keras.callbacks.EarlyStopping(monitor = \"val_accuracy\",\n", " patience = 20)])\n", " \n", " split_train.append(hist_j.history)" ] }, { "cell_type": "code", "execution_count": 9, "id": "T8OsGAOolHYx", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 368 }, "id": "T8OsGAOolHYx", "outputId": "3c4060d9-56eb-42c8-dd2e-516fa47d3ba1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "44/44 - 10s - loss: 0.5960 - accuracy: 0.8450 - 10s/epoch - 228ms/step\n", "=======================================================================\n", "Accuracy on test: 84.50%\n", "Memory used: 664.3 Mb\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2, figsize = (14, 4))\n", "ax[0].plot(split_train[0][\"loss\"]+split_train[1][\"loss\"]+\n", " split_train[2][\"loss\"]+split_train[3][\"loss\"],\n", " label = \"Train loss\", color = \"#191970\")\n", "ax[0].plot(split_train[0][\"val_loss\"]+split_train[1][\"val_loss\"]+\n", " split_train[2][\"val_loss\"]+split_train[3][\"val_loss\"],\n", " label = \"Val loss\", color = \"#00CC33\")\n", "ax[0].set_title(\"Loss\")\n", "ax[0].legend()\n", "\n", "ax[1].plot(split_train[0][\"accuracy\"]+split_train[1][\"accuracy\"]+\n", " split_train[2][\"accuracy\"]+split_train[3][\"accuracy\"],\n", " label = \"Train accuracy\", color = \"#191970\")\n", "ax[1].plot(split_train[0][\"val_accuracy\"]+split_train[1][\"val_accuracy\"]+\n", " split_train[2][\"val_accuracy\"]+split_train[3][\"val_accuracy\"],\n", " label = \"Val accuracy\", color = \"#00CC33\")\n", "ax[1].set_title(\"Accuracy\")\n", "ax[1].set_ylim(0, 1.1)\n", "ax[1].legend()\n", "\n", "for i in range(len(ax)):\n", " step_n = 0\n", " for el in split_train:\n", " step_n += len(el[\"val_loss\"])\n", " ax[i].axvline(step_n, ls = \"--\", color = \"grey\", alpha = .5)\n", "\n", "print()\n", "scores0 = model0.evaluate(X_test, y_test, verbose = 2)\n", "print(\"=\"*71)\n", "print(\"Accuracy on test: {:.2f}%\".format(scores0[1]*100))\n", "print(\"Memory used: {:.1f} Mb\".format(\n", " evaluation.keras_model_memory_usage_in_bytes(model = model0,\n", " batch_size = BATCH_SIZE1)/1e6))\n", "\n", "plt.show()\n", "#plt.savefig(\"CNN-only.jpg\", dpi = 300)" ] }, { "cell_type": "code", "execution_count": 11, "id": "Aw-m8TSK6K6n", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Aw-m8TSK6K6n", "outputId": "bd806a48-e02b-4f15-8ddf-5ce5cbd66840" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "44/44 [==============================] - 11s 224ms/step\n", " precision recall f1-score support\n", "\n", " 0 0.97 0.89 0.93 35\n", " 1 0.90 1.00 0.95 35\n", " 2 0.92 0.70 0.79 33\n", " 3 0.91 0.94 0.93 34\n", " 4 0.90 0.97 0.93 29\n", " 5 0.86 0.83 0.85 30\n", " 6 0.88 0.68 0.77 34\n", " 7 0.91 0.80 0.85 25\n", " 8 0.93 0.93 0.93 28\n", " 9 0.95 0.91 0.93 22\n", " 10 0.69 0.92 0.79 24\n", " 11 0.81 0.88 0.85 25\n", " 12 0.88 0.97 0.92 30\n", " 13 0.73 0.84 0.78 19\n", " 14 0.96 0.77 0.86 31\n", " 15 0.96 0.72 0.83 36\n", " 16 0.84 0.75 0.79 28\n", " 17 0.92 0.88 0.90 26\n", " 18 0.96 0.86 0.91 29\n", " 19 1.00 0.86 0.92 35\n", " 20 0.75 0.92 0.83 26\n", " 21 0.85 1.00 0.92 23\n", " 22 0.97 0.95 0.96 38\n", " 23 0.58 0.64 0.61 22\n", " 24 0.96 0.86 0.91 29\n", " 25 0.80 0.91 0.85 22\n", " 26 0.76 0.87 0.81 30\n", " 27 0.79 0.90 0.84 21\n", " 28 0.75 0.84 0.79 25\n", " 29 0.78 0.62 0.69 29\n", " 30 0.75 0.86 0.80 21\n", " 31 0.65 0.91 0.75 22\n", " 32 0.77 0.90 0.83 30\n", " 33 0.85 0.70 0.77 33\n", " 34 0.96 0.92 0.94 24\n", " 35 0.80 0.77 0.79 31\n", " 36 0.66 0.82 0.73 28\n", " 37 0.87 1.00 0.93 33\n", " 38 0.75 0.75 0.75 24\n", " 39 0.88 0.95 0.91 22\n", " 40 0.67 0.92 0.77 26\n", " 41 0.75 0.60 0.67 35\n", " 42 0.69 0.86 0.77 21\n", " 43 0.93 0.90 0.92 30\n", " 44 0.89 0.86 0.87 28\n", " 45 0.83 0.68 0.75 22\n", " 46 0.94 0.89 0.92 19\n", " 47 0.96 0.84 0.90 31\n", " 48 0.84 0.93 0.89 29\n", " 49 1.00 0.74 0.85 38\n", "\n", " accuracy 0.84 1400\n", " macro avg 0.85 0.85 0.84 1400\n", "weighted avg 0.86 0.84 0.84 1400\n", "\n" ] } ], "source": [ "print(classification_report(y_test, model0.predict(X_test).argmax(axis = 1)))" ] }, { "cell_type": "markdown", "id": "xvl4eW65ELir", "metadata": { "id": "xvl4eW65ELir" }, "source": [ "### Input with only two channels\n", "To assess the impact of the addition of the third channel to the input (chromagram), the same architecture presented before is trained with only the first two channels (MFCC and their derivatives)." ] }, { "cell_type": "code", "execution_count": 12, "id": "8kxqp_3xEJa7", "metadata": { "id": "8kxqp_3xEJa7" }, "outputs": [], "source": [ "X_train2 = X_train[:, :, :, :-1]\n", "X_valid2 = X_valid[:, :, :, :-1]\n", "X_test2 = X_test[:, :, :, :-1]" ] }, { "cell_type": "code", "execution_count": 13, "id": "zDee48klES1g", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zDee48klES1g", "outputId": "8488b1d0-cb12-4ddc-da18-2f2e9b57ece7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"M2\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " conv2d_3 (Conv2D) (None, 60, 431, 30) 4350 \n", " \n", " max_pooling2d_3 (MaxPooling (None, 58, 143, 30) 0 \n", " 2D) \n", " \n", " dropout_2 (Dropout) (None, 58, 143, 30) 0 \n", " \n", " conv2d_4 (Conv2D) (None, 58, 143, 30) 2730 \n", " \n", " max_pooling2d_4 (MaxPooling (None, 58, 47, 30) 0 \n", " 2D) \n", " \n", " conv2d_5 (Conv2D) (None, 58, 47, 10) 910 \n", " \n", " max_pooling2d_5 (MaxPooling (None, 58, 15, 10) 0 \n", " 2D) \n", " \n", " flatten_1 (Flatten) (None, 8700) 0 \n", " \n", " dense_2 (Dense) (None, 500) 4350500 \n", " \n", " dropout_3 (Dropout) (None, 500) 0 \n", " \n", " dense_3 (Dense) (None, 50) 25050 \n", " \n", "=================================================================\n", "Total params: 4,383,540\n", "Trainable params: 4,383,540\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n" ] } ], "source": [ "with tpu_strategy.scope():\n", " # creating the model in the TPUStrategy\n", " # scope means we will train the model on the TPU\n", " model2 = keras.models.Sequential([keras.layers.Conv2D(filters = 30, kernel_size = [12, 6],\n", " padding = \"same\", activation = \"relu\",\n", " input_shape = [60, 431, 2]),\n", " keras.layers.MaxPool2D(pool_size = (3, 3), strides = (1, 3)),\n", " keras.layers.Dropout(rate = .5),\n", " keras.layers.Conv2D(filters = 30, kernel_size = (1, 3),\n", " padding = \"same\", activation = \"relu\"),\n", " keras.layers.MaxPool2D(pool_size = (1, 3), strides = (1, 3)),\n", " keras.layers.Conv2D(filters = 10, kernel_size = (1, 3),\n", " padding = \"same\", activation = \"relu\"),\n", " keras.layers.MaxPool2D(pool_size = (1, 3), strides = (1, 3)),\n", " keras.layers.Flatten(),\n", " keras.layers.Dense(500, activation = \"relu\"), # BOOSTS PERFORMANCE\n", " keras.layers.Dropout(rate = .5),\n", " keras.layers.Dense(50, activation = \"softmax\") ],\n", " name = \"M2\")\n", "\n", " model2.compile(loss = \"sparse_categorical_crossentropy\",\n", " metrics = [\"accuracy\"],\n", " optimizer = keras.optimizers.Adam(learning_rate = 1e-4))\n", "\n", "print(model2.summary())" ] }, { "cell_type": "code", "execution_count": 14, "id": "clx3OtF3EnJc", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "clx3OtF3EnJc", "outputId": "611dfe70-627d-4872-fb1c-cd5d0394d0ba" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 4/4 [17:52<00:00, 268.08s/it]\n" ] } ], "source": [ "split_train2 = []\n", "for j in tqdm(range(4)):\n", " j_start = int(j*(len(X_train2)/4))\n", " j_stop = int((j+1)*(len(X_train2)/4))\n", " hist_j2 = model2.fit(X_train2[j_start:j_stop], y_train[j_start:j_stop],\n", " epochs = 200, batch_size = BATCH_SIZE1,\n", " validation_data = (X_valid2, y_valid),\n", " verbose = 0,\n", " callbacks = [keras.callbacks.EarlyStopping(monitor = \"val_accuracy\",\n", " patience = 20)])\n", " \n", " split_train2.append(hist_j2.history)" ] }, { "cell_type": "code", "execution_count": 15, "id": "jdErLCA4EwtO", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 368 }, "id": "jdErLCA4EwtO", "outputId": "72aeafc1-0cd9-4e18-fbb5-41d803d7da4c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "44/44 - 10s - loss: 1.3673 - accuracy: 0.6514 - 10s/epoch - 235ms/step\n", "=======================================================================\n", "Accuracy on test: 65.14%\n", "Memory used: 664.3 Mb\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig2, ax2 = plt.subplots(1, 2, figsize = (14, 4))\n", "ax2[0].plot(split_train2[0][\"loss\"]+split_train2[1][\"loss\"]+\n", " split_train2[2][\"loss\"]+split_train2[3][\"loss\"],\n", " label = \"Train loss\", color = \"#191970\")\n", "ax2[0].plot(split_train2[0][\"val_loss\"]+split_train2[1][\"val_loss\"]+\n", " split_train2[2][\"val_loss\"]+split_train2[3][\"val_loss\"],\n", " label = \"Val loss\", color = \"#00CC33\")\n", "ax2[0].set_title(\"Loss\")\n", "ax2[0].legend()\n", "\n", "ax2[1].plot(split_train2[0][\"accuracy\"]+split_train2[1][\"accuracy\"]+\n", " split_train2[2][\"accuracy\"]+split_train2[3][\"accuracy\"],\n", " label = \"Train accuracy\", color = \"#191970\")\n", "ax2[1].plot(split_train2[0][\"val_accuracy\"]+split_train2[1][\"val_accuracy\"]+\n", " split_train2[2][\"val_accuracy\"]+split_train2[3][\"val_accuracy\"],\n", " label = \"Val accuracy\", color = \"#00CC33\")\n", "ax2[1].set_title(\"Accuracy\")\n", "ax2[1].set_ylim(0, 1.1)\n", "ax2[1].legend()\n", "\n", "for i in range(len(ax2)):\n", " step_n = 0\n", " for el in split_train2:\n", " step_n += len(el[\"val_loss\"])\n", " ax2[i].axvline(step_n, ls = \"--\", color = \"grey\", alpha = .5)\n", "\n", "print()\n", "scores2 = model2.evaluate(X_test2, y_test, verbose = 2)\n", "print(\"=\"*71)\n", "print(\"Accuracy on test: {:.2f}%\".format(scores2[1]*100))\n", "print(\"Memory used: {:.1f} Mb\".format(\n", " evaluation.keras_model_memory_usage_in_bytes(model = model2,\n", " batch_size = BATCH_SIZE1)/1e6))\n", "\n", "plt.show()\n", "#plt.savefig(\"CNN-only-2.jpg\", dpi = 300)" ] }, { "cell_type": "markdown", "id": "xuSzNkPA-_jU", "metadata": { "id": "xuSzNkPA-_jU" }, "source": [ "---\n", "---\n", "---" ] } ], "metadata": { "accelerator": "TPU", "colab": { "collapsed_sections": [ "744bfa6e" ], "machine_shape": "hm", "provenance": [], "toc_visible": true }, "gpuClass": "standard", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }