본문 바로가기

AI_딥 러닝_시각지능

AI_파이썬_시각지능_CNN_Transfer Learning2_2024

Keras Upgrade


!pip install keras-nightly
Collecting keras-nightly
  Downloading keras_nightly-3.7.0.dev2025010203-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: absl-py in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (1.4.0)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (1.26.4)
Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (13.9.4)
Requirement already satisfied: namex in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.0.8)
Requirement already satisfied: h5py in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (3.12.1)
Requirement already satisfied: optree in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.13.1)
Requirement already satisfied: ml-dtypes in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.4.1)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (24.2)
Requirement already satisfied: typing-extensions>=4.5.0 in /usr/local/lib/python3.10/dist-packages (from optree->keras-nightly) (4.12.2)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->keras-nightly) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->keras-nightly) (2.18.0)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->keras-nightly) (0.1.2)
Downloading keras_nightly-3.7.0.dev2025010203-py3-none-any.whl (1.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 10.9 MB/s eta 0:00:00
Installing collected packages: keras-nightly
Successfully installed keras-nightly-3.7.0.dev2025010203

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import random as rd

from sklearn.metrics import accuracy\_score

import keras

(train_x, train_y), (test_x, test_y) = keras.datasets.cifar10.load_data()
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170498071/170498071 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step

labels = {0 : 'Airplane',
          1 : 'Automobile',
          2 : 'Bird',
          3 : 'Cat',
          4 : 'Deer',
          5 : 'Dog',
          6 : 'Frog',
          7 : 'Horse',
          8 : 'Ship',
          9 : 'Truck' }

'''
Ctrl+Enter를 이용하여
반복 실행 해보자!
'''

id = rd.randrange(0,10000)

print(f'id = {id}')
print(f'다음 그림은 {labels[test_y[id][0]]} 입니다.')
plt.imshow(test_x[id])
plt.show()


train_x.shape, train_y.shape
((50000, 32, 32, 3), (50000, 1))

Transfer Learning


from keras.applications.resnet50 import ResNet50
from keras.applications.resnet50 import preprocess_input, decode_predictions

keras.utils.clear_session()

base_model = ResNet50(include_top=False,
                      weights='imagenet',
                      input_shape=(32,32,3),
                      pooling='avg',
                      )

output_layer = keras.layers.Dense(10, activation='softmax')(base_model.output)

new_model = keras.models.Model(base_model.input, output_layer)
new_model.summary()
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5
94765736/94765736 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)              ┃ Output Shape           ┃        Param # ┃ Connected to           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)  │ (None, 32, 32, 3)      │              0 │ -                      │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv1_pad (ZeroPadding2D) │ (None, 38, 38, 3)      │              0 │ input_layer[0][0]      │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv1_conv (Conv2D)       │ (None, 16, 16, 64)     │          9,472 │ conv1_pad[0][0]        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv1_bn                  │ (None, 16, 16, 64)     │            256 │ conv1_conv[0][0]       │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv1_relu (Activation)   │ (None, 16, 16, 64)     │              0 │ conv1_bn[0][0]         │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ pool1_pad (ZeroPadding2D) │ (None, 18, 18, 64)     │              0 │ conv1_relu[0][0]       │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ pool1_pool (MaxPooling2D) │ (None, 8, 8, 64)       │              0 │ pool1_pad[0][0]        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_1_conv       │ (None, 8, 8, 64)       │          4,160 │ pool1_pool[0][0]       │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_1_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block1_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_1_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block1_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_2_conv       │ (None, 8, 8, 64)       │         36,928 │ conv2_block1_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_2_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block1_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_2_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block1_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_0_conv       │ (None, 8, 8, 256)      │         16,640 │ pool1_pool[0][0]       │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_3_conv       │ (None, 8, 8, 256)      │         16,640 │ conv2_block1_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_0_bn         │ (None, 8, 8, 256)      │          1,024 │ conv2_block1_0_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_3_bn         │ (None, 8, 8, 256)      │          1,024 │ conv2_block1_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_add (Add)    │ (None, 8, 8, 256)      │              0 │ conv2_block1_0_bn[0][… │
│                           │                        │                │ conv2_block1_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block1_out          │ (None, 8, 8, 256)      │              0 │ conv2_block1_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_1_conv       │ (None, 8, 8, 64)       │         16,448 │ conv2_block1_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_1_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block2_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_1_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block2_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_2_conv       │ (None, 8, 8, 64)       │         36,928 │ conv2_block2_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_2_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block2_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_2_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block2_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_3_conv       │ (None, 8, 8, 256)      │         16,640 │ conv2_block2_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_3_bn         │ (None, 8, 8, 256)      │          1,024 │ conv2_block2_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_add (Add)    │ (None, 8, 8, 256)      │              0 │ conv2_block1_out[0][0… │
│                           │                        │                │ conv2_block2_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block2_out          │ (None, 8, 8, 256)      │              0 │ conv2_block2_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_1_conv       │ (None, 8, 8, 64)       │         16,448 │ conv2_block2_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_1_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block3_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_1_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block3_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_2_conv       │ (None, 8, 8, 64)       │         36,928 │ conv2_block3_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_2_bn         │ (None, 8, 8, 64)       │            256 │ conv2_block3_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_2_relu       │ (None, 8, 8, 64)       │              0 │ conv2_block3_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_3_conv       │ (None, 8, 8, 256)      │         16,640 │ conv2_block3_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_3_bn         │ (None, 8, 8, 256)      │          1,024 │ conv2_block3_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_add (Add)    │ (None, 8, 8, 256)      │              0 │ conv2_block2_out[0][0… │
│                           │                        │                │ conv2_block3_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2_block3_out          │ (None, 8, 8, 256)      │              0 │ conv2_block3_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_1_conv       │ (None, 4, 4, 128)      │         32,896 │ conv2_block3_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_1_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block1_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_1_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block1_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_2_conv       │ (None, 4, 4, 128)      │        147,584 │ conv3_block1_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_2_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block1_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_2_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block1_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_0_conv       │ (None, 4, 4, 512)      │        131,584 │ conv2_block3_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_3_conv       │ (None, 4, 4, 512)      │         66,048 │ conv3_block1_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_0_bn         │ (None, 4, 4, 512)      │          2,048 │ conv3_block1_0_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_3_bn         │ (None, 4, 4, 512)      │          2,048 │ conv3_block1_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_add (Add)    │ (None, 4, 4, 512)      │              0 │ conv3_block1_0_bn[0][… │
│                           │                        │                │ conv3_block1_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block1_out          │ (None, 4, 4, 512)      │              0 │ conv3_block1_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_1_conv       │ (None, 4, 4, 128)      │         65,664 │ conv3_block1_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_1_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block2_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_1_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block2_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_2_conv       │ (None, 4, 4, 128)      │        147,584 │ conv3_block2_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_2_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block2_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_2_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block2_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_3_conv       │ (None, 4, 4, 512)      │         66,048 │ conv3_block2_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_3_bn         │ (None, 4, 4, 512)      │          2,048 │ conv3_block2_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_add (Add)    │ (None, 4, 4, 512)      │              0 │ conv3_block1_out[0][0… │
│                           │                        │                │ conv3_block2_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block2_out          │ (None, 4, 4, 512)      │              0 │ conv3_block2_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_1_conv       │ (None, 4, 4, 128)      │         65,664 │ conv3_block2_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_1_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block3_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_1_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block3_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_2_conv       │ (None, 4, 4, 128)      │        147,584 │ conv3_block3_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_2_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block3_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_2_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block3_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_3_conv       │ (None, 4, 4, 512)      │         66,048 │ conv3_block3_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_3_bn         │ (None, 4, 4, 512)      │          2,048 │ conv3_block3_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_add (Add)    │ (None, 4, 4, 512)      │              0 │ conv3_block2_out[0][0… │
│                           │                        │                │ conv3_block3_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block3_out          │ (None, 4, 4, 512)      │              0 │ conv3_block3_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_1_conv       │ (None, 4, 4, 128)      │         65,664 │ conv3_block3_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_1_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block4_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_1_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block4_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_2_conv       │ (None, 4, 4, 128)      │        147,584 │ conv3_block4_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_2_bn         │ (None, 4, 4, 128)      │            512 │ conv3_block4_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_2_relu       │ (None, 4, 4, 128)      │              0 │ conv3_block4_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_3_conv       │ (None, 4, 4, 512)      │         66,048 │ conv3_block4_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_3_bn         │ (None, 4, 4, 512)      │          2,048 │ conv3_block4_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_add (Add)    │ (None, 4, 4, 512)      │              0 │ conv3_block3_out[0][0… │
│                           │                        │                │ conv3_block4_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv3_block4_out          │ (None, 4, 4, 512)      │              0 │ conv3_block4_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_1_conv       │ (None, 2, 2, 256)      │        131,328 │ conv3_block4_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block1_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block1_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block1_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block1_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block1_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_0_conv       │ (None, 2, 2, 1024)     │        525,312 │ conv3_block4_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block1_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_0_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block1_0_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block1_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block1_0_bn[0][… │
│                           │                        │                │ conv4_block1_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block1_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block1_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_1_conv       │ (None, 2, 2, 256)      │        262,400 │ conv4_block1_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block2_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block2_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block2_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block2_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block2_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block2_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block2_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block1_out[0][0… │
│                           │                        │                │ conv4_block2_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block2_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block2_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_1_conv       │ (None, 2, 2, 256)      │        262,400 │ conv4_block2_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block3_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block3_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block3_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block3_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block3_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block3_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block3_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block2_out[0][0… │
│                           │                        │                │ conv4_block3_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block3_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block3_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_1_conv       │ (None, 2, 2, 256)      │        262,400 │ conv4_block3_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block4_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block4_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block4_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block4_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block4_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block4_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block4_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block3_out[0][0… │
│                           │                        │                │ conv4_block4_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block4_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block4_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_1_conv       │ (None, 2, 2, 256)      │        262,400 │ conv4_block4_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block5_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block5_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block5_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block5_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block5_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block5_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block5_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block4_out[0][0… │
│                           │                        │                │ conv4_block5_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block5_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block5_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_1_conv       │ (None, 2, 2, 256)      │        262,400 │ conv4_block5_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_1_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block6_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_1_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block6_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_2_conv       │ (None, 2, 2, 256)      │        590,080 │ conv4_block6_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_2_bn         │ (None, 2, 2, 256)      │          1,024 │ conv4_block6_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_2_relu       │ (None, 2, 2, 256)      │              0 │ conv4_block6_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_3_conv       │ (None, 2, 2, 1024)     │        263,168 │ conv4_block6_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_3_bn         │ (None, 2, 2, 1024)     │          4,096 │ conv4_block6_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_add (Add)    │ (None, 2, 2, 1024)     │              0 │ conv4_block5_out[0][0… │
│                           │                        │                │ conv4_block6_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv4_block6_out          │ (None, 2, 2, 1024)     │              0 │ conv4_block6_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_1_conv       │ (None, 1, 1, 512)      │        524,800 │ conv4_block6_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_1_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block1_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_1_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block1_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_2_conv       │ (None, 1, 1, 512)      │      2,359,808 │ conv5_block1_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_2_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block1_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_2_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block1_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_0_conv       │ (None, 1, 1, 2048)     │      2,099,200 │ conv4_block6_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_3_conv       │ (None, 1, 1, 2048)     │      1,050,624 │ conv5_block1_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_0_bn         │ (None, 1, 1, 2048)     │          8,192 │ conv5_block1_0_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_3_bn         │ (None, 1, 1, 2048)     │          8,192 │ conv5_block1_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_add (Add)    │ (None, 1, 1, 2048)     │              0 │ conv5_block1_0_bn[0][… │
│                           │                        │                │ conv5_block1_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block1_out          │ (None, 1, 1, 2048)     │              0 │ conv5_block1_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_1_conv       │ (None, 1, 1, 512)      │      1,049,088 │ conv5_block1_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_1_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block2_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_1_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block2_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_2_conv       │ (None, 1, 1, 512)      │      2,359,808 │ conv5_block2_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_2_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block2_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_2_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block2_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_3_conv       │ (None, 1, 1, 2048)     │      1,050,624 │ conv5_block2_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_3_bn         │ (None, 1, 1, 2048)     │          8,192 │ conv5_block2_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_add (Add)    │ (None, 1, 1, 2048)     │              0 │ conv5_block1_out[0][0… │
│                           │                        │                │ conv5_block2_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block2_out          │ (None, 1, 1, 2048)     │              0 │ conv5_block2_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_1_conv       │ (None, 1, 1, 512)      │      1,049,088 │ conv5_block2_out[0][0] │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_1_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block3_1_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_1_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block3_1_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_2_conv       │ (None, 1, 1, 512)      │      2,359,808 │ conv5_block3_1_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_2_bn         │ (None, 1, 1, 512)      │          2,048 │ conv5_block3_2_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_2_relu       │ (None, 1, 1, 512)      │              0 │ conv5_block3_2_bn[0][… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_3_conv       │ (None, 1, 1, 2048)     │      1,050,624 │ conv5_block3_2_relu[0… │
│ (Conv2D)                  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_3_bn         │ (None, 1, 1, 2048)     │          8,192 │ conv5_block3_3_conv[0… │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_add (Add)    │ (None, 1, 1, 2048)     │              0 │ conv5_block2_out[0][0… │
│                           │                        │                │ conv5_block3_3_bn[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv5_block3_out          │ (None, 1, 1, 2048)     │              0 │ conv5_block3_add[0][0] │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ avg_pool                  │ (None, 2048)           │              0 │ conv5_block3_out[0][0] │
│ (GlobalAveragePooling2D)  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ dense (Dense)             │ (None, 10)             │         20,490 │ avg_pool[0][0]         │
└───────────────────────────┴────────────────────────┴────────────────┴────────────────────────┘
 Total params: 23,608,202 (90.06 MB)
 Trainable params: 23,555,082 (89.86 MB)
 Non-trainable params: 53,120 (207.50 KB)

new_model.layers
[<InputLayer name=input_layer, built=True>,
 <ZeroPadding2D name=conv1_pad, built=True>,
 <Conv2D name=conv1_conv, built=True>,
 <BatchNormalization name=conv1_bn, built=True>,
 <Activation name=conv1_relu, built=True>,
 <ZeroPadding2D name=pool1_pad, built=True>,
 <MaxPooling2D name=pool1_pool, built=True>,
 <Conv2D name=conv2_block1_1_conv, built=True>,
 <BatchNormalization name=conv2_block1_1_bn, built=True>,
 <Activation name=conv2_block1_1_relu, built=True>,
 <Conv2D name=conv2_block1_2_conv, built=True>,
 <BatchNormalization name=conv2_block1_2_bn, built=True>,
 <Activation name=conv2_block1_2_relu, built=True>,
 <Conv2D name=conv2_block1_0_conv, built=True>,
 <Conv2D name=conv2_block1_3_conv, built=True>,
 <BatchNormalization name=conv2_block1_0_bn, built=True>,
 <BatchNormalization name=conv2_block1_3_bn, built=True>,
 <Add name=conv2_block1_add, built=True>,
 <Activation name=conv2_block1_out, built=True>,
 <Conv2D name=conv2_block2_1_conv, built=True>,
 <BatchNormalization name=conv2_block2_1_bn, built=True>,
 <Activation name=conv2_block2_1_relu, built=True>,
 <Conv2D name=conv2_block2_2_conv, built=True>,
 <BatchNormalization name=conv2_block2_2_bn, built=True>,
 <Activation name=conv2_block2_2_relu, built=True>,
 <Conv2D name=conv2_block2_3_conv, built=True>,
 <BatchNormalization name=conv2_block2_3_bn, built=True>,
 <Add name=conv2_block2_add, built=True>,
 <Activation name=conv2_block2_out, built=True>,
 <Conv2D name=conv2_block3_1_conv, built=True>,
 <BatchNormalization name=conv2_block3_1_bn, built=True>,
 <Activation name=conv2_block3_1_relu, built=True>,
 <Conv2D name=conv2_block3_2_conv, built=True>,
 <BatchNormalization name=conv2_block3_2_bn, built=True>,
 <Activation name=conv2_block3_2_relu, built=True>,
 <Conv2D name=conv2_block3_3_conv, built=True>,
 <BatchNormalization name=conv2_block3_3_bn, built=True>,
 <Add name=conv2_block3_add, built=True>,
 <Activation name=conv2_block3_out, built=True>,
 <Conv2D name=conv3_block1_1_conv, built=True>,
 <BatchNormalization name=conv3_block1_1_bn, built=True>,
 <Activation name=conv3_block1_1_relu, built=True>,
 <Conv2D name=conv3_block1_2_conv, built=True>,
 <BatchNormalization name=conv3_block1_2_bn, built=True>,
 <Activation name=conv3_block1_2_relu, built=True>,
 <Conv2D name=conv3_block1_0_conv, built=True>,
 <Conv2D name=conv3_block1_3_conv, built=True>,
 <BatchNormalization name=conv3_block1_0_bn, built=True>,
 <BatchNormalization name=conv3_block1_3_bn, built=True>,
 <Add name=conv3_block1_add, built=True>,
 <Activation name=conv3_block1_out, built=True>,
 <Conv2D name=conv3_block2_1_conv, built=True>,
 <BatchNormalization name=conv3_block2_1_bn, built=True>,
 <Activation name=conv3_block2_1_relu, built=True>,
 <Conv2D name=conv3_block2_2_conv, built=True>,
 <BatchNormalization name=conv3_block2_2_bn, built=True>,
 <Activation name=conv3_block2_2_relu, built=True>,
 <Conv2D name=conv3_block2_3_conv, built=True>,
 <BatchNormalization name=conv3_block2_3_bn, built=True>,
 <Add name=conv3_block2_add, built=True>,
 <Activation name=conv3_block2_out, built=True>,
 <Conv2D name=conv3_block3_1_conv, built=True>,
 <BatchNormalization name=conv3_block3_1_bn, built=True>,
 <Activation name=conv3_block3_1_relu, built=True>,
 <Conv2D name=conv3_block3_2_conv, built=True>,
 <BatchNormalization name=conv3_block3_2_bn, built=True>,
 <Activation name=conv3_block3_2_relu, built=True>,
 <Conv2D name=conv3_block3_3_conv, built=True>,
 <BatchNormalization name=conv3_block3_3_bn, built=True>,
 <Add name=conv3_block3_add, built=True>,
 <Activation name=conv3_block3_out, built=True>,
 <Conv2D name=conv3_block4_1_conv, built=True>,
 <BatchNormalization name=conv3_block4_1_bn, built=True>,
 <Activation name=conv3_block4_1_relu, built=True>,
 <Conv2D name=conv3_block4_2_conv, built=True>,
 <BatchNormalization name=conv3_block4_2_bn, built=True>,
 <Activation name=conv3_block4_2_relu, built=True>,
 <Conv2D name=conv3_block4_3_conv, built=True>,
 <BatchNormalization name=conv3_block4_3_bn, built=True>,
 <Add name=conv3_block4_add, built=True>,
 <Activation name=conv3_block4_out, built=True>,
 <Conv2D name=conv4_block1_1_conv, built=True>,
 <BatchNormalization name=conv4_block1_1_bn, built=True>,
 <Activation name=conv4_block1_1_relu, built=True>,
 <Conv2D name=conv4_block1_2_conv, built=True>,
 <BatchNormalization name=conv4_block1_2_bn, built=True>,
 <Activation name=conv4_block1_2_relu, built=True>,
 <Conv2D name=conv4_block1_0_conv, built=True>,
 <Conv2D name=conv4_block1_3_conv, built=True>,
 <BatchNormalization name=conv4_block1_0_bn, built=True>,
 <BatchNormalization name=conv4_block1_3_bn, built=True>,
 <Add name=conv4_block1_add, built=True>,
 <Activation name=conv4_block1_out, built=True>,
 <Conv2D name=conv4_block2_1_conv, built=True>,
 <BatchNormalization name=conv4_block2_1_bn, built=True>,
 <Activation name=conv4_block2_1_relu, built=True>,
 <Conv2D name=conv4_block2_2_conv, built=True>,
 <BatchNormalization name=conv4_block2_2_bn, built=True>,
 <Activation name=conv4_block2_2_relu, built=True>,
 <Conv2D name=conv4_block2_3_conv, built=True>,
 <BatchNormalization name=conv4_block2_3_bn, built=True>,
 <Add name=conv4_block2_add, built=True>,
 <Activation name=conv4_block2_out, built=True>,
 <Conv2D name=conv4_block3_1_conv, built=True>,
 <BatchNormalization name=conv4_block3_1_bn, built=True>,
 <Activation name=conv4_block3_1_relu, built=True>,
 <Conv2D name=conv4_block3_2_conv, built=True>,
 <BatchNormalization name=conv4_block3_2_bn, built=True>,
 <Activation name=conv4_block3_2_relu, built=True>,
 <Conv2D name=conv4_block3_3_conv, built=True>,
 <BatchNormalization name=conv4_block3_3_bn, built=True>,
 <Add name=conv4_block3_add, built=True>,
 <Activation name=conv4_block3_out, built=True>,
 <Conv2D name=conv4_block4_1_conv, built=True>,
 <BatchNormalization name=conv4_block4_1_bn, built=True>,
 <Activation name=conv4_block4_1_relu, built=True>,
 <Conv2D name=conv4_block4_2_conv, built=True>,
 <BatchNormalization name=conv4_block4_2_bn, built=True>,
 <Activation name=conv4_block4_2_relu, built=True>,
 <Conv2D name=conv4_block4_3_conv, built=True>,
 <BatchNormalization name=conv4_block4_3_bn, built=True>,
 <Add name=conv4_block4_add, built=True>,
 <Activation name=conv4_block4_out, built=True>,
 <Conv2D name=conv4_block5_1_conv, built=True>,
 <BatchNormalization name=conv4_block5_1_bn, built=True>,
 <Activation name=conv4_block5_1_relu, built=True>,
 <Conv2D name=conv4_block5_2_conv, built=True>,
 <BatchNormalization name=conv4_block5_2_bn, built=True>,
 <Activation name=conv4_block5_2_relu, built=True>,
 <Conv2D name=conv4_block5_3_conv, built=True>,
 <BatchNormalization name=conv4_block5_3_bn, built=True>,
 <Add name=conv4_block5_add, built=True>,
 <Activation name=conv4_block5_out, built=True>,
 <Conv2D name=conv4_block6_1_conv, built=True>,
 <BatchNormalization name=conv4_block6_1_bn, built=True>,
 <Activation name=conv4_block6_1_relu, built=True>,
 <Conv2D name=conv4_block6_2_conv, built=True>,
 <BatchNormalization name=conv4_block6_2_bn, built=True>,
 <Activation name=conv4_block6_2_relu, built=True>,
 <Conv2D name=conv4_block6_3_conv, built=True>,
 <BatchNormalization name=conv4_block6_3_bn, built=True>,
 <Add name=conv4_block6_add, built=True>,
 <Activation name=conv4_block6_out, built=True>,
 <Conv2D name=conv5_block1_1_conv, built=True>,
 <BatchNormalization name=conv5_block1_1_bn, built=True>,
 <Activation name=conv5_block1_1_relu, built=True>,
 <Conv2D name=conv5_block1_2_conv, built=True>,
 <BatchNormalization name=conv5_block1_2_bn, built=True>,
 <Activation name=conv5_block1_2_relu, built=True>,
 <Conv2D name=conv5_block1_0_conv, built=True>,
 <Conv2D name=conv5_block1_3_conv, built=True>,
 <BatchNormalization name=conv5_block1_0_bn, built=True>,
 <BatchNormalization name=conv5_block1_3_bn, built=True>,
 <Add name=conv5_block1_add, built=True>,
 <Activation name=conv5_block1_out, built=True>,
 <Conv2D name=conv5_block2_1_conv, built=True>,
 <BatchNormalization name=conv5_block2_1_bn, built=True>,
 <Activation name=conv5_block2_1_relu, built=True>,
 <Conv2D name=conv5_block2_2_conv, built=True>,
 <BatchNormalization name=conv5_block2_2_bn, built=True>,
 <Activation name=conv5_block2_2_relu, built=True>,
 <Conv2D name=conv5_block2_3_conv, built=True>,
 <BatchNormalization name=conv5_block2_3_bn, built=True>,
 <Add name=conv5_block2_add, built=True>,
 <Activation name=conv5_block2_out, built=True>,
 <Conv2D name=conv5_block3_1_conv, built=True>,
 <BatchNormalization name=conv5_block3_1_bn, built=True>,
 <Activation name=conv5_block3_1_relu, built=True>,
 <Conv2D name=conv5_block3_2_conv, built=True>,
 <BatchNormalization name=conv5_block3_2_bn, built=True>,
 <Activation name=conv5_block3_2_relu, built=True>,
 <Conv2D name=conv5_block3_3_conv, built=True>,
 <BatchNormalization name=conv5_block3_3_bn, built=True>,
 <Add name=conv5_block3_add, built=True>,
 <Activation name=conv5_block3_out, built=True>,
 <GlobalAveragePooling2D name=avg_pool, built=True>,
 <Dense name=dense, built=True>]

for layer in new_model.layers[:-1] :
    layer.trainable = False

new_model.compile(optimizer='adam', loss=keras.losses.sparse_categorical_crossentropy,
                   metrics=['accuracy'])

from keras.callbacks import EarlyStopping

es = EarlyStopping(monitor='val_loss',
                   min_delta=0,
                   patience=4,
                   verbose=1,
                   restore_best_weights=True
                   )

hist = new_model.fit(train_x, train_y, epochs=100, verbose=1,
                     validation_split=0.2, callbacks=[es]
                     )
Epoch 1/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 30s 15ms/step - accuracy: 0.4578 - loss: 1.9027 - val_accuracy: 0.5672 - val_loss: 1.3607
Epoch 2/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 12s 10ms/step - accuracy: 0.6004 - loss: 1.2240 - val_accuracy: 0.5785 - val_loss: 1.3495
Epoch 3/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 21s 10ms/step - accuracy: 0.6231 - loss: 1.1425 - val_accuracy: 0.5877 - val_loss: 1.3794
Epoch 4/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 13s 11ms/step - accuracy: 0.6350 - loss: 1.1158 - val_accuracy: 0.5911 - val_loss: 1.3944
Epoch 5/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 12s 10ms/step - accuracy: 0.6524 - loss: 1.0700 - val_accuracy: 0.5851 - val_loss: 1.3947
Epoch 6/100
1250/1250 ━━━━━━━━━━━━━━━━━━━━ 17s 14ms/step - accuracy: 0.6566 - loss: 1.0473 - val_accuracy: 0.5879 - val_loss: 1.4358
Epoch 6: early stopping
Restoring model weights from the end of the best epoch: 2.

  • Evaluate

new_model.evaluate(test_x, test_y)
313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 8ms/step - accuracy: 0.5817 - loss: 1.3523
[1.3387278318405151, 0.585099995136261]

  • Inference

y_pred = new_model.predict(test_x)
313/313 ━━━━━━━━━━━━━━━━━━━━ 9s 19ms/step

y_pred.shape
(10000, 10)

y_pred_arg = np.argmax(y_pred, axis=1)
test_y_arg = np.ravel(test_y)

Visualize Inference


'''
성능 확인을 위해
Ctrl+Enter를 이용하여
반복 실행 해보자!
'''

id = rd.randrange(0,10000)

print(f'id = {id}')
print(f'다음 그림은 {labels[test_y_arg[id]]} 입니다.')
print(f'모델의 예측 : {labels[y_pred_arg[id]]}')

prob = np.floor(y_pred[id]*100).tolist()
prob_dict = {}

for idx, prob in enumerate(prob) :
    prob_dict[ labels[idx] ] = prob

print('모델의 카테고리별 확률 : ')
print(prob_dict)

if test_y_arg[id] == y_pred_arg[id] :
    print('정답입니다')
else :
    print('틀렸어요')

plt.imshow(test_x[id].reshape([32,32,-1]))
plt.show()


'''
틀린 것만 관찰해보자!

Ctrl+Enter를 이용하여
반복 실행 해보자!
'''

true_false = (test_y == y_pred)
f_id = np.where(true_false == False)[0]
f_n = len(f_id)

id = f_id[rd.randrange(0,f_n)]

print(f'id = {id}')
print(f'다음 그림은 {labels[test_y_arg[id]]} 입니다.')
print(f'모델의 예측 : {labels[y_pred_arg[id]]}')

prob = np.floor(y_pred[id]*100).tolist()
prob_dict = {}

for idx, prob in enumerate(prob) :
    prob_dict[ labels[idx] ] = prob

print('모델의 카테고리별 확률 : ')
print(prob_dict)

if test_y_arg[id] == y_pred_arg[id] :
    print('정답입니다')
else :
    print('틀렸어요')

plt.imshow(test_x[id].reshape([32,32,-1]))
plt.show()