Last active
October 10, 2023 13:54
-
-
Save BenAji/26580ebe3b7af4ff555674a39d2ce162 to your computer and use it in GitHub Desktop.
Resnet-b32b32e20 Traffic_densety.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "name": " Resnet-b32b32e20 Traffic_densety.ipynb", | |
| "provenance": [], | |
| "collapsed_sections": [], | |
| "mount_file_id": "1c809S0qFG8BdS5TVBErTcXKQa6x3lkMw", | |
| "authorship_tag": "ABX9TyNedVOYOgSZdzyJ4tvbMsFc", | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| }, | |
| "accelerator": "GPU" | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/BenAji/26580ebe3b7af4ff555674a39d2ce162/-resnet-b32b32e20-traffic_densety.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 35 | |
| }, | |
| "id": "b2QBSlMrr-YD", | |
| "outputId": "b096d660-4f22-4136-bf30-10906805ca83" | |
| }, | |
| "source": [ | |
| "import tensorflow as tf\n", | |
| "tf.__version__\n" | |
| ], | |
| "execution_count": 1, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "application/vnd.google.colaboratory.intrinsic+json": { | |
| "type": "string" | |
| }, | |
| "text/plain": [ | |
| "'2.6.0'" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 1 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "eoCDmyA3sHAP" | |
| }, | |
| "source": [ | |
| "from tensorflow.keras.layers import Input, Lambda, Dense, Flatten\n", | |
| "from tensorflow.keras.models import Model\n", | |
| "#from tensorflow.keras.applications.inception_v3 import InceptionV3\n", | |
| "from tensorflow.keras.applications.resnet import ResNet50\n", | |
| "from tensorflow.keras.applications.resnet import preprocess_input\n", | |
| "#from tensorflow.keras.applications.inception_v3 import preprocess_input\n", | |
| "from tensorflow.keras.preprocessing import image\n", | |
| "from tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img\n", | |
| "from tensorflow.keras.models import Sequential\n", | |
| "#import re\n", | |
| "import numpy as np\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "\n", | |
| "%matplotlib inline\n", | |
| "import sklearn\n", | |
| "from sklearn import metrics\n", | |
| "#from sklearn.metrics import confusion_matrix\n", | |
| "#from sklearn.metrics import plot_confusion_matrix\n", | |
| "\n", | |
| "#import pandas as pd\n", | |
| "from glob import glob" | |
| ], | |
| "execution_count": 2, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "CJlz29AusL7m" | |
| }, | |
| "source": [ | |
| "IMAGE_SIZE =[224, 224]\n", | |
| "\n", | |
| "train_path='/content/drive/MyDrive/raw_imgs/train'\n", | |
| "valid_path='/content/drive/MyDrive/raw_imgs/valid'" | |
| ], | |
| "execution_count": 3, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "ja2JxxXeuJzm", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "outputId": "f24b0df7-851d-47e2-c9c9-4d0a9610f856" | |
| }, | |
| "source": [ | |
| "resnet = ResNet50(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)" | |
| ], | |
| "execution_count": 4, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\n", | |
| "94773248/94765736 [==============================] - 1s 0us/step\n", | |
| "94781440/94765736 [==============================] - 1s 0us/step\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "E3iemH2EuWVS" | |
| }, | |
| "source": [ | |
| "for layer in resnet.layers:\n", | |
| " layer.trainable = False" | |
| ], | |
| "execution_count": 5, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "OQs8y8oOuZ6j" | |
| }, | |
| "source": [ | |
| " folders = glob('/content/drive/MyDrive/raw_imgs/train/*')" | |
| ], | |
| "execution_count": 6, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "VPvK_Eu0xp4v", | |
| "outputId": "869303c6-7d57-40c3-b5d4-2cc77a298822" | |
| }, | |
| "source": [ | |
| "folders" | |
| ], | |
| "execution_count": 7, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "['/content/drive/MyDrive/raw_imgs/train/high',\n", | |
| " '/content/drive/MyDrive/raw_imgs/train/low']" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 7 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "DLHAU62Gugvx" | |
| }, | |
| "source": [ | |
| "x = Flatten()(resnet.output)" | |
| ], | |
| "execution_count": 8, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "K9PVpuoouh3s" | |
| }, | |
| "source": [ | |
| "prediction = Dense(len(folders), activation='sigmoid')(x)" | |
| ], | |
| "execution_count": 9, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "qeucQjkXuknT" | |
| }, | |
| "source": [ | |
| "model = Model(inputs=resnet.input, outputs=prediction) " | |
| ], | |
| "execution_count": 10, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "zvm0o7WLupNq", | |
| "outputId": "284d15d3-b119-4584-a2b6-e025cd49adb4" | |
| }, | |
| "source": [ | |
| "model.summary()\n" | |
| ], | |
| "execution_count": 11, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Model: \"model\"\n", | |
| "__________________________________________________________________________________________________\n", | |
| "Layer (type) Output Shape Param # Connected to \n", | |
| "==================================================================================================\n", | |
| "input_1 (InputLayer) [(None, 224, 224, 3) 0 \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_1[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n", | |
| " conv2_block1_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n", | |
| " conv2_block2_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n", | |
| " conv2_block3_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n", | |
| " conv3_block1_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n", | |
| " conv3_block2_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n", | |
| " conv3_block3_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n", | |
| " conv3_block4_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n", | |
| " conv4_block1_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n", | |
| " conv4_block2_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n", | |
| " conv4_block3_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n", | |
| " conv4_block4_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n", | |
| " conv4_block5_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n", | |
| " conv4_block6_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n", | |
| " conv5_block1_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n", | |
| " conv5_block2_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n", | |
| " conv5_block3_3_bn[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "flatten (Flatten) (None, 100352) 0 conv5_block3_out[0][0] \n", | |
| "__________________________________________________________________________________________________\n", | |
| "dense (Dense) (None, 2) 200706 flatten[0][0] \n", | |
| "==================================================================================================\n", | |
| "Total params: 23,788,418\n", | |
| "Trainable params: 200,706\n", | |
| "Non-trainable params: 23,587,712\n", | |
| "__________________________________________________________________________________________________\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "COqmHYbJvChK" | |
| }, | |
| "source": [ | |
| "model.compile(\n", | |
| " loss = 'categorical_crossentropy',\n", | |
| " optimizer= 'Adam',\n", | |
| " metrics=['accuracy']\n", | |
| ")" | |
| ], | |
| "execution_count": 12, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "PDl8aGTLvJ5V" | |
| }, | |
| "source": [ | |
| "from tensorflow.keras.preprocessing.image import ImageDataGenerator" | |
| ], | |
| "execution_count": 13, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "advj3B6qvMQi" | |
| }, | |
| "source": [ | |
| "train_datagen = ImageDataGenerator(rescale =1./255,\n", | |
| " shear_range = 0.2,\n", | |
| " zoom_range = 0.2,\n", | |
| " horizontal_flip = True)\n", | |
| "\n", | |
| "test_datagen = ImageDataGenerator(rescale= 1./255)" | |
| ], | |
| "execution_count": 14, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "1CmLRuCqwcoI", | |
| "outputId": "4df86781-c2a9-46ba-bbfd-c73bc9e9659c" | |
| }, | |
| "source": [ | |
| "training_set = train_datagen.flow_from_directory('/content/drive/MyDrive/raw_imgs/train',\n", | |
| " target_size =(224,224),\n", | |
| " batch_size =32,\n", | |
| " class_mode = 'categorical')" | |
| ], | |
| "execution_count": 15, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Found 436 images belonging to 2 classes.\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "Gty5mz9Hzh_F", | |
| "outputId": "593bbebc-7890-409d-8976-55afb0fbae7e" | |
| }, | |
| "source": [ | |
| "test_set = test_datagen.flow_from_directory('/content/drive/MyDrive/raw_imgs/valid',\n", | |
| " target_size = (224,224),\n", | |
| " batch_size =32,\n", | |
| " class_mode = 'categorical')" | |
| ], | |
| "execution_count": 16, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Found 110 images belonging to 2 classes.\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "FqN52WlqwfSA", | |
| "outputId": "75863163-4b7e-4eb0-ab8d-027cd441c43e" | |
| }, | |
| "source": [ | |
| "r = model.fit_generator(\n", | |
| " training_set,\n", | |
| " validation_data=test_set,\n", | |
| " epochs=20,\n", | |
| " steps_per_epoch=len(training_set),\n", | |
| " validation_steps= len(test_set)\n", | |
| ")" | |
| ], | |
| "execution_count": 17, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stderr", | |
| "text": [ | |
| "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:1972: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.\n", | |
| " warnings.warn('`Model.fit_generator` is deprecated and '\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Epoch 1/20\n", | |
| "14/14 [==============================] - 463s 31s/step - loss: 6.0120 - accuracy: 0.5734 - val_loss: 5.8722 - val_accuracy: 0.3455\n", | |
| "Epoch 2/20\n", | |
| "14/14 [==============================] - 10s 739ms/step - loss: 2.4547 - accuracy: 0.6147 - val_loss: 1.2456 - val_accuracy: 0.7273\n", | |
| "Epoch 3/20\n", | |
| "14/14 [==============================] - 10s 723ms/step - loss: 0.8595 - accuracy: 0.7408 - val_loss: 0.5732 - val_accuracy: 0.7545\n", | |
| "Epoch 4/20\n", | |
| "14/14 [==============================] - 10s 743ms/step - loss: 0.5581 - accuracy: 0.7523 - val_loss: 0.8835 - val_accuracy: 0.6182\n", | |
| "Epoch 5/20\n", | |
| "14/14 [==============================] - 10s 748ms/step - loss: 0.5559 - accuracy: 0.7362 - val_loss: 0.5917 - val_accuracy: 0.7273\n", | |
| "Epoch 6/20\n", | |
| "14/14 [==============================] - 10s 744ms/step - loss: 0.8009 - accuracy: 0.6835 - val_loss: 0.6638 - val_accuracy: 0.7455\n", | |
| "Epoch 7/20\n", | |
| "14/14 [==============================] - 10s 739ms/step - loss: 0.5558 - accuracy: 0.7706 - val_loss: 0.4026 - val_accuracy: 0.8273\n", | |
| "Epoch 8/20\n", | |
| "14/14 [==============================] - 10s 742ms/step - loss: 0.4081 - accuracy: 0.7982 - val_loss: 0.3915 - val_accuracy: 0.8091\n", | |
| "Epoch 9/20\n", | |
| "14/14 [==============================] - 10s 734ms/step - loss: 0.4225 - accuracy: 0.7913 - val_loss: 0.4984 - val_accuracy: 0.7909\n", | |
| "Epoch 10/20\n", | |
| "14/14 [==============================] - 10s 734ms/step - loss: 0.5607 - accuracy: 0.7431 - val_loss: 0.4111 - val_accuracy: 0.8182\n", | |
| "Epoch 11/20\n", | |
| "14/14 [==============================] - 10s 741ms/step - loss: 0.3949 - accuracy: 0.8119 - val_loss: 0.4882 - val_accuracy: 0.7545\n", | |
| "Epoch 12/20\n", | |
| "14/14 [==============================] - 10s 730ms/step - loss: 0.3758 - accuracy: 0.8257 - val_loss: 0.3830 - val_accuracy: 0.8182\n", | |
| "Epoch 13/20\n", | |
| "14/14 [==============================] - 10s 731ms/step - loss: 0.3511 - accuracy: 0.8303 - val_loss: 0.4489 - val_accuracy: 0.7727\n", | |
| "Epoch 14/20\n", | |
| "14/14 [==============================] - 10s 724ms/step - loss: 0.4107 - accuracy: 0.7890 - val_loss: 0.5460 - val_accuracy: 0.7182\n", | |
| "Epoch 15/20\n", | |
| "14/14 [==============================] - 10s 755ms/step - loss: 0.3817 - accuracy: 0.7982 - val_loss: 0.3894 - val_accuracy: 0.8455\n", | |
| "Epoch 16/20\n", | |
| "14/14 [==============================] - 10s 735ms/step - loss: 0.3723 - accuracy: 0.8257 - val_loss: 0.3842 - val_accuracy: 0.8364\n", | |
| "Epoch 17/20\n", | |
| "14/14 [==============================] - 10s 735ms/step - loss: 0.3569 - accuracy: 0.8440 - val_loss: 0.3923 - val_accuracy: 0.8364\n", | |
| "Epoch 18/20\n", | |
| "14/14 [==============================] - 10s 725ms/step - loss: 0.3924 - accuracy: 0.8211 - val_loss: 0.3780 - val_accuracy: 0.8273\n", | |
| "Epoch 19/20\n", | |
| "14/14 [==============================] - 10s 742ms/step - loss: 0.5122 - accuracy: 0.7615 - val_loss: 0.5254 - val_accuracy: 0.7727\n", | |
| "Epoch 20/20\n", | |
| "14/14 [==============================] - 10s 732ms/step - loss: 0.3985 - accuracy: 0.8234 - val_loss: 0.4868 - val_accuracy: 0.7636\n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "Eu8_5EZM2tUc" | |
| }, | |
| "source": [ | |
| "# create learning curves to evaluate model performance\n", | |
| "import pandas as pd\n", | |
| "history_frame = pd.DataFrame(r.history)" | |
| ], | |
| "execution_count": 18, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 282 | |
| }, | |
| "id": "AHTn5C9627yr", | |
| "outputId": "283054b7-396b-436a-f107-8264df7b23d6" | |
| }, | |
| "source": [ | |
| "history_frame.loc[:, ['loss', 'val_loss']].plot()" | |
| ], | |
| "execution_count": 19, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7f4c36226c90>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "execution_count": 19 | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| } | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 265 | |
| }, | |
| "id": "3xwmm7r62-j1", | |
| "outputId": "4ce7eb41-e65e-4b1c-ca57-a70dd46c22f8" | |
| }, | |
| "source": [ | |
| "history_frame.loc[:, ['accuracy', 'val_accuracy']].plot();" | |
| ], | |
| "execution_count": 20, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "image/png": "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VM+ALkMWhajx6taVBl1B1XPYYlqsDFkUoiL99izE77bvMZt0guFv2PeYVUB2dnaVyetSPVvoaXHg3czRtRBC2NGzzz57SW6W6dOn8+qrrzJ48GC6d+9Op06d+OWXX2w61tmzZ4vc7+uvv86b1j958mQAEhISuOmmm+jSpQtdunRhw4YNHDt2jI4dO+bt99ZbbzF9+nQABg4cyGOPPUaPHj149913WbRoEb1796Zbt25cc801JCQk5NVjypQpdOrUic6dOzN//nxmzpzJY489lnfczz77jMcff7zM1+0SWmuHfIWHh+syycnWerqv1iteLtv+QohC7d2716Hn37Ztm+7fv3/e49DQUH3ixAmdmpqqtdY6KSlJt27dWlssFq211nXq1CnyWFlZWYXut2fPHt22bVudlJSktdY6OTlZa631uHHj9DvvvKO11jo7O1ufOXNGHz16VIeFheUd880339TTpk3TWms9YMAAff/99+dtS0lJyavXZ599pp944gmttdZPP/20fvTRRy8pl56erlu1aqUzMzO11lr37dtX79q1q9Dfo7C/CRChi4irVeNzQmmcTQSdI10uQjiZbt26kZiYSGxsLElJSfj6+tKkSRMef/xx1q5di4uLCydPniQhIYEmTZoUeyytNc8///xl+61cuZKxY8fSqJHJ+J2b63zlypV5+c1dXV3x8fEpccGM3CRhYBbOGD9+PHFxcWRmZublbi8qZ/vVV1/N4sWLCQ0NJSsri06dOpXyahWu+gX0vCGLMgZdCGczduxY5s2bR3x8POPHj2f27NkkJSWxdetW3N3dCQ4OvizHeWHKul9+bm5uWCyWvMfF5VZ/+OGHeeKJJxg5ciSrV6/O65opyt13383rr79O+/bt7ZqKt/r1oedNKpIWuhDOZvz48cydO5d58+YxduxYUlNTady4Me7u7qxatYrjx4/bdJyi9rv66qv58ccfSU5OBv7OdT548GA+/vhjAHJyckhNTcXf35/ExESSk5O5ePEiixcvLvZ8ubnVv/rqq7zni8rZ3rt3b6Kjo/nuu++YOHGirZenRNUwoEsLXQhnFRYWRnp6Os2aNaNp06ZMmjSJiIgIOnXqxNdff0379u1tOk5R+4WFhfHCCy8wYMAAunTpwhNPPAHAu+++y6pVq+jUqRPh4eHs3bsXd3d3XnrpJXr16sWQIUOKPff0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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| } | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "0B7hvcxB3cyf" | |
| }, | |
| "source": [ | |
| "" | |
| ], | |
| "execution_count": 20, | |
| "outputs": [] | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment