본문 바로가기

AI_딥 러닝_시각지능

AI_파이썬_시각지능_CNN_Transfer Learning_2024

Transfer Learning


쉽지만 중요한 코너!

"잘 만들어진" 모델들을 가져다가 "고쳐" 사용해보자.


Keras Upgrade


!pip install keras-nightly
Collecting keras-nightly
  Downloading keras_nightly-3.6.0.dev2024101603-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.2)
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.11.0)
Requirement already satisfied: optree in /usr/local/lib/python3.10/dist-packages (from keras-nightly) (0.13.0)
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.1)
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.6.0.dev2024101603-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 25.6 MB/s eta 0:00:00
Installing collected packages: keras-nightly
Successfully installed keras-nightly-3.6.0.dev2024101603

Library Loading


import keras

from keras.applications.inception_v3 import InceptionV3
from keras.applications.inception_v3 import preprocess_input
from keras.applications.inception_v3 import decode_predictions
from keras.callbacks import EarlyStopping, ReduceLROnPlateau

from keras.preprocessing import image
from keras.utils import to_categorical
from keras.layers import GlobalAveragePooling2D, Dense

from sklearn.model_selection import train_test_split

import random
import numpy as np
import matplotlib.pyplot as plt
import glob

Collecting Image Data

  • 최소 조건 : 클래스 3개, 한 클래스당 10장 이상. 다다익선!
    • ImageNet data에는 확실히 없을만한 것들로. (이를테면 만화 캐릭터간 비교)
    • 좋은 결과를 위해서라면 클래스가 확실히 차이나는 이미지로.
    • 도전(역경)을 위해서라면 클래스가 달라도 비슷비슷해 보이는 이미지로.

  • 순서
    1. 구글링하여 이미지를 수집합니다.
    2. 본인의 구글 드라이브에 my_data 폴더를 생성합니다.
    3. my_data 폴더 안에 transfer 폴더를 생성합니다.
    4. 1번 단계에서 수집한 이미지를 transfer 폴더 안에 업로드하되, 하나의 클래스당 하나의 폴더를 갖도록 정리합니다.
    5. 30초 정도 기다립니다.
    6. 아래 코드들을 실행합니다.

Connect Colaboratory with my Google Drive

  • Colaboratory와 본인의 구글 드라이브를 연결하는 과정
  • 아래 코드를 실행하여 폴더가 올바르게 생성 되었는지 확인

from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).

!cd /content/drive/MyDrive/my_data/; ls
/bin/bash: line 1: cd: /content/drive/MyDrive/my_data/: No such file or directory
drive  sample_data

!cd /content/drive/MyDrive/my_data/transfer; ls
/bin/bash: line 1: cd: /content/drive/MyDrive/my_data/transfer: No such file or directory
drive  sample_data

files = glob.glob('/content/drive/MyDrive/my_data/transfer/*/*')
files
['/content/drive/MyDrive/my_data/transfer/1/15.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/10.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/17.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/14.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/16.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/11.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/13.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/19.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/18.jpg',
 '/content/drive/MyDrive/my_data/transfer/1/12.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/37.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/31.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/38.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/36.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/35.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/39.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/34.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/30.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/33.jpg',
 '/content/drive/MyDrive/my_data/transfer/3/32.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/21.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/23.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/27.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/20.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/29.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/22.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/28.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/25.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/24.jpg',
 '/content/drive/MyDrive/my_data/transfer/2/26.jpg']

files[-1].split('/')[-2]

name_cnt = {}

for x in files :
    name_cnt[x.split('/')[-2]] = name_cnt.get(x.split('/')[-2], 0) + 1

name_cnt
{'1': 10, '3': 10, '2': 10}

i = 0
names = {}

for key in name_cnt :
    names[key] = i     # names_cnt의 key값에 새로운 값 부여
    i += 1             # 클래스 수만큼 i값 증가

names
{'1': 0, '3': 1, '2': 2}

images = []
labels = []

for path in files:
    img = image.load_img(path, target_size=(299,299) )
    img = image.img_to_array(img)

    images.append(img)
    labels.append(names[path.split('/')[-2]])

    plt.imshow(image.load_img(path))
    plt.show()

images_arr = np.array(images)
labels_arr = np.array(labels)

print(images_arr.shape)
print(labels_arr.shape)
# 이미지의 용량이 매우 커 출력값은 생략하도록 한다.

print(labels_arr)
label_v = len(np.unique(labels_arr))
label_v
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2]
3

### 라벨링
y = to_categorical(labels, label_v)

print(y[:3])
y.shape
[[1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]]
(30, 3)

Dataset split

  • training set, validation set, test set 생성
  • 각 이미지 그룹별로 균등한 분할을 위하여. 아래 코드가 조금 복잡합니다.

name_cnt.values()
dict_values([10, 10, 10])

temp = []
init_v = 0

for v in name_cnt.values() :
    temp.append( (images[init_v:init_v+v], y[init_v:init_v+v]) )
    init_v += v

for i in range(len(temp)) :
    x_to_array = np.array(temp[i][0])
    y_to_array = np.array(temp[i][1])

    train_x, test_x, train_y, test_y =\
        train_test_split(x_to_array, y_to_array, test_size=0.2, random_state=2024)

    train_x, valid_x, train_y, valid_y =\
        train_test_split(train_x, train_y, test_size=0.2, random_state=2024)

    if i==0 :
        first_tr_x, first_va_x, first_te_x = train_x.copy(), valid_x.copy(), test_x.copy()
        first_tr_y, first_va_y, first_te_y = train_y.copy(), valid_y.copy(), test_y.copy()

    elif i==1 :
        new_tr_x, new_tr_y = np.vstack((first_tr_x, train_x)), np.vstack((first_tr_y, train_y))
        new_va_x, new_va_y = np.vstack((first_va_x, valid_x)), np.vstack((first_va_y, valid_y))
        new_te_x, new_te_y = np.vstack((first_te_x, test_x)), np.vstack((first_te_y, test_y))

    else :
        new_tr_x, new_tr_y = np.vstack((new_tr_x, train_x)), np.vstack((new_tr_y, train_y))
        new_va_x, new_va_y = np.vstack((new_va_x, valid_x)), np.vstack((new_va_y, valid_y))
        new_te_x, new_te_y = np.vstack((new_te_x, test_x)), np.vstack((new_te_y, test_y))

new_tr_x.shape, new_tr_y.shape, new_va_x.shape, new_va_y.shape, new_te_x.shape, new_te_y.shape
((18, 299, 299, 3),
 (18, 3),
 (6, 299, 299, 3),
 (6, 3),
 (6, 299, 299, 3),
 (6, 3))

# 전처리 하지 않은 파일 따로 시각화 해두기
train_xv, valid_xv, test_xv = train_x.copy(), valid_x.copy(), test_x.copy()

Data Preprocessing

  • 잘 만들어진 모델에서 제공하는 전처리 과정을 사용합니다.

new_tr_x.max(), new_tr_x.min()
(255.0, 0.0)

new_tr_x = preprocess_input(new_tr_x)
new_va_x = preprocess_input(new_va_x)
new_te_x = preprocess_input(new_te_x)

new_tr_x.max(), new_tr_x.min()
(1.0, -1.0)

Load Pretrained Model


keras.backend.clear_session()

base_model = InceptionV3(weights='imagenet',       # ImageNet 데이터를 기반으로 미리 학습된 가중치 불러오기
                         include_top=False,        # InceptionV3 모델의 아웃풋 레이어는 제외하고 불러오기
                         input_shape= (299,299,3)) # 입력 데이터의 형태

new_output = GlobalAveragePooling2D()(base_model.output)
new_output = Dense(3, # class 3개   클래스 개수만큼 진행한다.
                  activation = 'softmax')(new_output)

model = keras.models.Model(base_model.inputs, new_output)

model.summary()
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/inception_v3/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5
87910968/87910968 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)              ┃ Output Shape           ┃        Param # ┃ Connected to           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)  │ (None, 299, 299, 3)    │              0 │ -                      │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d (Conv2D)           │ (None, 149, 149, 32)   │            864 │ input_layer[0][0]      │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization       │ (None, 149, 149, 32)   │             96 │ conv2d[0][0]           │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation (Activation)   │ (None, 149, 149, 32)   │              0 │ batch_normalization[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_1 (Conv2D)         │ (None, 147, 147, 32)   │          9,216 │ activation[0][0]       │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_1     │ (None, 147, 147, 32)   │             96 │ conv2d_1[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_1 (Activation) │ (None, 147, 147, 32)   │              0 │ batch_normalization_1… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_2 (Conv2D)         │ (None, 147, 147, 64)   │         18,432 │ activation_1[0][0]     │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_2     │ (None, 147, 147, 64)   │            192 │ conv2d_2[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_2 (Activation) │ (None, 147, 147, 64)   │              0 │ batch_normalization_2… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ max_pooling2d             │ (None, 73, 73, 64)     │              0 │ activation_2[0][0]     │
│ (MaxPooling2D)            │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_3 (Conv2D)         │ (None, 73, 73, 80)     │          5,120 │ max_pooling2d[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_3     │ (None, 73, 73, 80)     │            240 │ conv2d_3[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_3 (Activation) │ (None, 73, 73, 80)     │              0 │ batch_normalization_3… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_4 (Conv2D)         │ (None, 71, 71, 192)    │        138,240 │ activation_3[0][0]     │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_4     │ (None, 71, 71, 192)    │            576 │ conv2d_4[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_4 (Activation) │ (None, 71, 71, 192)    │              0 │ batch_normalization_4… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ max_pooling2d_1           │ (None, 35, 35, 192)    │              0 │ activation_4[0][0]     │
│ (MaxPooling2D)            │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_8 (Conv2D)         │ (None, 35, 35, 64)     │         12,288 │ max_pooling2d_1[0][0]  │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_8     │ (None, 35, 35, 64)     │            192 │ conv2d_8[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_8 (Activation) │ (None, 35, 35, 64)     │              0 │ batch_normalization_8… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_6 (Conv2D)         │ (None, 35, 35, 48)     │          9,216 │ max_pooling2d_1[0][0]  │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_9 (Conv2D)         │ (None, 35, 35, 96)     │         55,296 │ activation_8[0][0]     │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_6     │ (None, 35, 35, 48)     │            144 │ conv2d_6[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_9     │ (None, 35, 35, 96)     │            288 │ conv2d_9[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_6 (Activation) │ (None, 35, 35, 48)     │              0 │ batch_normalization_6… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_9 (Activation) │ (None, 35, 35, 96)     │              0 │ batch_normalization_9… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d         │ (None, 35, 35, 192)    │              0 │ max_pooling2d_1[0][0]  │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_5 (Conv2D)         │ (None, 35, 35, 64)     │         12,288 │ max_pooling2d_1[0][0]  │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_7 (Conv2D)         │ (None, 35, 35, 64)     │         76,800 │ activation_6[0][0]     │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_10 (Conv2D)        │ (None, 35, 35, 96)     │         82,944 │ activation_9[0][0]     │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_11 (Conv2D)        │ (None, 35, 35, 32)     │          6,144 │ average_pooling2d[0][… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_5     │ (None, 35, 35, 64)     │            192 │ conv2d_5[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_7     │ (None, 35, 35, 64)     │            192 │ conv2d_7[0][0]         │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_10    │ (None, 35, 35, 96)     │            288 │ conv2d_10[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_11    │ (None, 35, 35, 32)     │             96 │ conv2d_11[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_5 (Activation) │ (None, 35, 35, 64)     │              0 │ batch_normalization_5… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_7 (Activation) │ (None, 35, 35, 64)     │              0 │ batch_normalization_7… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_10             │ (None, 35, 35, 96)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_11             │ (None, 35, 35, 32)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed0 (Concatenate)      │ (None, 35, 35, 256)    │              0 │ activation_5[0][0],    │
│                           │                        │                │ activation_7[0][0],    │
│                           │                        │                │ activation_10[0][0],   │
│                           │                        │                │ activation_11[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_15 (Conv2D)        │ (None, 35, 35, 64)     │         16,384 │ mixed0[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_15    │ (None, 35, 35, 64)     │            192 │ conv2d_15[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_15             │ (None, 35, 35, 64)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_13 (Conv2D)        │ (None, 35, 35, 48)     │         12,288 │ mixed0[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_16 (Conv2D)        │ (None, 35, 35, 96)     │         55,296 │ activation_15[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_13    │ (None, 35, 35, 48)     │            144 │ conv2d_13[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_16    │ (None, 35, 35, 96)     │            288 │ conv2d_16[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_13             │ (None, 35, 35, 48)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_16             │ (None, 35, 35, 96)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_1       │ (None, 35, 35, 256)    │              0 │ mixed0[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_12 (Conv2D)        │ (None, 35, 35, 64)     │         16,384 │ mixed0[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_14 (Conv2D)        │ (None, 35, 35, 64)     │         76,800 │ activation_13[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_17 (Conv2D)        │ (None, 35, 35, 96)     │         82,944 │ activation_16[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_18 (Conv2D)        │ (None, 35, 35, 64)     │         16,384 │ average_pooling2d_1[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_12    │ (None, 35, 35, 64)     │            192 │ conv2d_12[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_14    │ (None, 35, 35, 64)     │            192 │ conv2d_14[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_17    │ (None, 35, 35, 96)     │            288 │ conv2d_17[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_18    │ (None, 35, 35, 64)     │            192 │ conv2d_18[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_12             │ (None, 35, 35, 64)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_14             │ (None, 35, 35, 64)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_17             │ (None, 35, 35, 96)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_18             │ (None, 35, 35, 64)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed1 (Concatenate)      │ (None, 35, 35, 288)    │              0 │ activation_12[0][0],   │
│                           │                        │                │ activation_14[0][0],   │
│                           │                        │                │ activation_17[0][0],   │
│                           │                        │                │ activation_18[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_22 (Conv2D)        │ (None, 35, 35, 64)     │         18,432 │ mixed1[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_22    │ (None, 35, 35, 64)     │            192 │ conv2d_22[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_22             │ (None, 35, 35, 64)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_20 (Conv2D)        │ (None, 35, 35, 48)     │         13,824 │ mixed1[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_23 (Conv2D)        │ (None, 35, 35, 96)     │         55,296 │ activation_22[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_20    │ (None, 35, 35, 48)     │            144 │ conv2d_20[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_23    │ (None, 35, 35, 96)     │            288 │ conv2d_23[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_20             │ (None, 35, 35, 48)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_23             │ (None, 35, 35, 96)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_2       │ (None, 35, 35, 288)    │              0 │ mixed1[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_19 (Conv2D)        │ (None, 35, 35, 64)     │         18,432 │ mixed1[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_21 (Conv2D)        │ (None, 35, 35, 64)     │         76,800 │ activation_20[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_24 (Conv2D)        │ (None, 35, 35, 96)     │         82,944 │ activation_23[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_25 (Conv2D)        │ (None, 35, 35, 64)     │         18,432 │ average_pooling2d_2[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_19    │ (None, 35, 35, 64)     │            192 │ conv2d_19[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_21    │ (None, 35, 35, 64)     │            192 │ conv2d_21[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_24    │ (None, 35, 35, 96)     │            288 │ conv2d_24[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_25    │ (None, 35, 35, 64)     │            192 │ conv2d_25[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_19             │ (None, 35, 35, 64)     │              0 │ batch_normalization_1… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_21             │ (None, 35, 35, 64)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_24             │ (None, 35, 35, 96)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_25             │ (None, 35, 35, 64)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed2 (Concatenate)      │ (None, 35, 35, 288)    │              0 │ activation_19[0][0],   │
│                           │                        │                │ activation_21[0][0],   │
│                           │                        │                │ activation_24[0][0],   │
│                           │                        │                │ activation_25[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_27 (Conv2D)        │ (None, 35, 35, 64)     │         18,432 │ mixed2[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_27    │ (None, 35, 35, 64)     │            192 │ conv2d_27[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_27             │ (None, 35, 35, 64)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_28 (Conv2D)        │ (None, 35, 35, 96)     │         55,296 │ activation_27[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_28    │ (None, 35, 35, 96)     │            288 │ conv2d_28[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_28             │ (None, 35, 35, 96)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_26 (Conv2D)        │ (None, 17, 17, 384)    │        995,328 │ mixed2[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_29 (Conv2D)        │ (None, 17, 17, 96)     │         82,944 │ activation_28[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_26    │ (None, 17, 17, 384)    │          1,152 │ conv2d_26[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_29    │ (None, 17, 17, 96)     │            288 │ conv2d_29[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_26             │ (None, 17, 17, 384)    │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_29             │ (None, 17, 17, 96)     │              0 │ batch_normalization_2… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ max_pooling2d_2           │ (None, 17, 17, 288)    │              0 │ mixed2[0][0]           │
│ (MaxPooling2D)            │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed3 (Concatenate)      │ (None, 17, 17, 768)    │              0 │ activation_26[0][0],   │
│                           │                        │                │ activation_29[0][0],   │
│                           │                        │                │ max_pooling2d_2[0][0]  │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_34 (Conv2D)        │ (None, 17, 17, 128)    │         98,304 │ mixed3[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_34    │ (None, 17, 17, 128)    │            384 │ conv2d_34[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_34             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_35 (Conv2D)        │ (None, 17, 17, 128)    │        114,688 │ activation_34[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_35    │ (None, 17, 17, 128)    │            384 │ conv2d_35[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_35             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_31 (Conv2D)        │ (None, 17, 17, 128)    │         98,304 │ mixed3[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_36 (Conv2D)        │ (None, 17, 17, 128)    │        114,688 │ activation_35[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_31    │ (None, 17, 17, 128)    │            384 │ conv2d_31[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_36    │ (None, 17, 17, 128)    │            384 │ conv2d_36[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_31             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_36             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_32 (Conv2D)        │ (None, 17, 17, 128)    │        114,688 │ activation_31[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_37 (Conv2D)        │ (None, 17, 17, 128)    │        114,688 │ activation_36[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_32    │ (None, 17, 17, 128)    │            384 │ conv2d_32[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_37    │ (None, 17, 17, 128)    │            384 │ conv2d_37[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_32             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_37             │ (None, 17, 17, 128)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_3       │ (None, 17, 17, 768)    │              0 │ mixed3[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_30 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed3[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_33 (Conv2D)        │ (None, 17, 17, 192)    │        172,032 │ activation_32[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_38 (Conv2D)        │ (None, 17, 17, 192)    │        172,032 │ activation_37[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_39 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ average_pooling2d_3[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_30    │ (None, 17, 17, 192)    │            576 │ conv2d_30[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_33    │ (None, 17, 17, 192)    │            576 │ conv2d_33[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_38    │ (None, 17, 17, 192)    │            576 │ conv2d_38[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_39    │ (None, 17, 17, 192)    │            576 │ conv2d_39[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_30             │ (None, 17, 17, 192)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_33             │ (None, 17, 17, 192)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_38             │ (None, 17, 17, 192)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_39             │ (None, 17, 17, 192)    │              0 │ batch_normalization_3… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed4 (Concatenate)      │ (None, 17, 17, 768)    │              0 │ activation_30[0][0],   │
│                           │                        │                │ activation_33[0][0],   │
│                           │                        │                │ activation_38[0][0],   │
│                           │                        │                │ activation_39[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_44 (Conv2D)        │ (None, 17, 17, 160)    │        122,880 │ mixed4[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_44    │ (None, 17, 17, 160)    │            480 │ conv2d_44[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_44             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_45 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_44[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_45    │ (None, 17, 17, 160)    │            480 │ conv2d_45[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_45             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_41 (Conv2D)        │ (None, 17, 17, 160)    │        122,880 │ mixed4[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_46 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_45[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_41    │ (None, 17, 17, 160)    │            480 │ conv2d_41[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_46    │ (None, 17, 17, 160)    │            480 │ conv2d_46[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_41             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_46             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_42 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_41[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_47 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_46[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_42    │ (None, 17, 17, 160)    │            480 │ conv2d_42[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_47    │ (None, 17, 17, 160)    │            480 │ conv2d_47[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_42             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_47             │ (None, 17, 17, 160)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_4       │ (None, 17, 17, 768)    │              0 │ mixed4[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_40 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed4[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_43 (Conv2D)        │ (None, 17, 17, 192)    │        215,040 │ activation_42[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_48 (Conv2D)        │ (None, 17, 17, 192)    │        215,040 │ activation_47[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_49 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ average_pooling2d_4[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_40    │ (None, 17, 17, 192)    │            576 │ conv2d_40[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_43    │ (None, 17, 17, 192)    │            576 │ conv2d_43[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_48    │ (None, 17, 17, 192)    │            576 │ conv2d_48[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_49    │ (None, 17, 17, 192)    │            576 │ conv2d_49[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_40             │ (None, 17, 17, 192)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_43             │ (None, 17, 17, 192)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_48             │ (None, 17, 17, 192)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_49             │ (None, 17, 17, 192)    │              0 │ batch_normalization_4… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed5 (Concatenate)      │ (None, 17, 17, 768)    │              0 │ activation_40[0][0],   │
│                           │                        │                │ activation_43[0][0],   │
│                           │                        │                │ activation_48[0][0],   │
│                           │                        │                │ activation_49[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_54 (Conv2D)        │ (None, 17, 17, 160)    │        122,880 │ mixed5[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_54    │ (None, 17, 17, 160)    │            480 │ conv2d_54[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_54             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_55 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_54[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_55    │ (None, 17, 17, 160)    │            480 │ conv2d_55[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_55             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_51 (Conv2D)        │ (None, 17, 17, 160)    │        122,880 │ mixed5[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_56 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_55[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_51    │ (None, 17, 17, 160)    │            480 │ conv2d_51[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_56    │ (None, 17, 17, 160)    │            480 │ conv2d_56[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_51             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_56             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_52 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_51[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_57 (Conv2D)        │ (None, 17, 17, 160)    │        179,200 │ activation_56[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_52    │ (None, 17, 17, 160)    │            480 │ conv2d_52[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_57    │ (None, 17, 17, 160)    │            480 │ conv2d_57[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_52             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_57             │ (None, 17, 17, 160)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_5       │ (None, 17, 17, 768)    │              0 │ mixed5[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_50 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed5[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_53 (Conv2D)        │ (None, 17, 17, 192)    │        215,040 │ activation_52[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_58 (Conv2D)        │ (None, 17, 17, 192)    │        215,040 │ activation_57[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_59 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ average_pooling2d_5[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_50    │ (None, 17, 17, 192)    │            576 │ conv2d_50[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_53    │ (None, 17, 17, 192)    │            576 │ conv2d_53[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_58    │ (None, 17, 17, 192)    │            576 │ conv2d_58[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_59    │ (None, 17, 17, 192)    │            576 │ conv2d_59[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_50             │ (None, 17, 17, 192)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_53             │ (None, 17, 17, 192)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_58             │ (None, 17, 17, 192)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_59             │ (None, 17, 17, 192)    │              0 │ batch_normalization_5… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed6 (Concatenate)      │ (None, 17, 17, 768)    │              0 │ activation_50[0][0],   │
│                           │                        │                │ activation_53[0][0],   │
│                           │                        │                │ activation_58[0][0],   │
│                           │                        │                │ activation_59[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_64 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed6[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_64    │ (None, 17, 17, 192)    │            576 │ conv2d_64[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_64             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_65 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_64[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_65    │ (None, 17, 17, 192)    │            576 │ conv2d_65[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_65             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_61 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed6[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_66 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_65[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_61    │ (None, 17, 17, 192)    │            576 │ conv2d_61[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_66    │ (None, 17, 17, 192)    │            576 │ conv2d_66[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_61             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_66             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_62 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_61[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_67 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_66[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_62    │ (None, 17, 17, 192)    │            576 │ conv2d_62[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_67    │ (None, 17, 17, 192)    │            576 │ conv2d_67[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_62             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_67             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_6       │ (None, 17, 17, 768)    │              0 │ mixed6[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_60 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed6[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_63 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_62[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_68 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_67[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_69 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ average_pooling2d_6[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_60    │ (None, 17, 17, 192)    │            576 │ conv2d_60[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_63    │ (None, 17, 17, 192)    │            576 │ conv2d_63[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_68    │ (None, 17, 17, 192)    │            576 │ conv2d_68[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_69    │ (None, 17, 17, 192)    │            576 │ conv2d_69[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_60             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_63             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_68             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_69             │ (None, 17, 17, 192)    │              0 │ batch_normalization_6… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed7 (Concatenate)      │ (None, 17, 17, 768)    │              0 │ activation_60[0][0],   │
│                           │                        │                │ activation_63[0][0],   │
│                           │                        │                │ activation_68[0][0],   │
│                           │                        │                │ activation_69[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_72 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed7[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_72    │ (None, 17, 17, 192)    │            576 │ conv2d_72[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_72             │ (None, 17, 17, 192)    │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_73 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_72[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_73    │ (None, 17, 17, 192)    │            576 │ conv2d_73[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_73             │ (None, 17, 17, 192)    │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_70 (Conv2D)        │ (None, 17, 17, 192)    │        147,456 │ mixed7[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_74 (Conv2D)        │ (None, 17, 17, 192)    │        258,048 │ activation_73[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_70    │ (None, 17, 17, 192)    │            576 │ conv2d_70[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_74    │ (None, 17, 17, 192)    │            576 │ conv2d_74[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_70             │ (None, 17, 17, 192)    │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_74             │ (None, 17, 17, 192)    │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_71 (Conv2D)        │ (None, 8, 8, 320)      │        552,960 │ activation_70[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_75 (Conv2D)        │ (None, 8, 8, 192)      │        331,776 │ activation_74[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_71    │ (None, 8, 8, 320)      │            960 │ conv2d_71[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_75    │ (None, 8, 8, 192)      │            576 │ conv2d_75[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_71             │ (None, 8, 8, 320)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_75             │ (None, 8, 8, 192)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ max_pooling2d_3           │ (None, 8, 8, 768)      │              0 │ mixed7[0][0]           │
│ (MaxPooling2D)            │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed8 (Concatenate)      │ (None, 8, 8, 1280)     │              0 │ activation_71[0][0],   │
│                           │                        │                │ activation_75[0][0],   │
│                           │                        │                │ max_pooling2d_3[0][0]  │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_80 (Conv2D)        │ (None, 8, 8, 448)      │        573,440 │ mixed8[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_80    │ (None, 8, 8, 448)      │          1,344 │ conv2d_80[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_80             │ (None, 8, 8, 448)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_77 (Conv2D)        │ (None, 8, 8, 384)      │        491,520 │ mixed8[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_81 (Conv2D)        │ (None, 8, 8, 384)      │      1,548,288 │ activation_80[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_77    │ (None, 8, 8, 384)      │          1,152 │ conv2d_77[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_81    │ (None, 8, 8, 384)      │          1,152 │ conv2d_81[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_77             │ (None, 8, 8, 384)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_81             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_78 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_77[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_79 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_77[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_82 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_81[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_83 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_81[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_7       │ (None, 8, 8, 1280)     │              0 │ mixed8[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_76 (Conv2D)        │ (None, 8, 8, 320)      │        409,600 │ mixed8[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_78    │ (None, 8, 8, 384)      │          1,152 │ conv2d_78[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_79    │ (None, 8, 8, 384)      │          1,152 │ conv2d_79[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_82    │ (None, 8, 8, 384)      │          1,152 │ conv2d_82[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_83    │ (None, 8, 8, 384)      │          1,152 │ conv2d_83[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_84 (Conv2D)        │ (None, 8, 8, 192)      │        245,760 │ average_pooling2d_7[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_76    │ (None, 8, 8, 320)      │            960 │ conv2d_76[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_78             │ (None, 8, 8, 384)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_79             │ (None, 8, 8, 384)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_82             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_83             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_84    │ (None, 8, 8, 192)      │            576 │ conv2d_84[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_76             │ (None, 8, 8, 320)      │              0 │ batch_normalization_7… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed9_0 (Concatenate)    │ (None, 8, 8, 768)      │              0 │ activation_78[0][0],   │
│                           │                        │                │ activation_79[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ concatenate (Concatenate) │ (None, 8, 8, 768)      │              0 │ activation_82[0][0],   │
│                           │                        │                │ activation_83[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_84             │ (None, 8, 8, 192)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed9 (Concatenate)      │ (None, 8, 8, 2048)     │              0 │ activation_76[0][0],   │
│                           │                        │                │ mixed9_0[0][0],        │
│                           │                        │                │ concatenate[0][0],     │
│                           │                        │                │ activation_84[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_89 (Conv2D)        │ (None, 8, 8, 448)      │        917,504 │ mixed9[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_89    │ (None, 8, 8, 448)      │          1,344 │ conv2d_89[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_89             │ (None, 8, 8, 448)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_86 (Conv2D)        │ (None, 8, 8, 384)      │        786,432 │ mixed9[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_90 (Conv2D)        │ (None, 8, 8, 384)      │      1,548,288 │ activation_89[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_86    │ (None, 8, 8, 384)      │          1,152 │ conv2d_86[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_90    │ (None, 8, 8, 384)      │          1,152 │ conv2d_90[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_86             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_90             │ (None, 8, 8, 384)      │              0 │ batch_normalization_9… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_87 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_86[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_88 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_86[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_91 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_90[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_92 (Conv2D)        │ (None, 8, 8, 384)      │        442,368 │ activation_90[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ average_pooling2d_8       │ (None, 8, 8, 2048)     │              0 │ mixed9[0][0]           │
│ (AveragePooling2D)        │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_85 (Conv2D)        │ (None, 8, 8, 320)      │        655,360 │ mixed9[0][0]           │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_87    │ (None, 8, 8, 384)      │          1,152 │ conv2d_87[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_88    │ (None, 8, 8, 384)      │          1,152 │ conv2d_88[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_91    │ (None, 8, 8, 384)      │          1,152 │ conv2d_91[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_92    │ (None, 8, 8, 384)      │          1,152 │ conv2d_92[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ conv2d_93 (Conv2D)        │ (None, 8, 8, 192)      │        393,216 │ average_pooling2d_8[0… │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_85    │ (None, 8, 8, 320)      │            960 │ conv2d_85[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_87             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_88             │ (None, 8, 8, 384)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_91             │ (None, 8, 8, 384)      │              0 │ batch_normalization_9… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_92             │ (None, 8, 8, 384)      │              0 │ batch_normalization_9… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ batch_normalization_93    │ (None, 8, 8, 192)      │            576 │ conv2d_93[0][0]        │
│ (BatchNormalization)      │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_85             │ (None, 8, 8, 320)      │              0 │ batch_normalization_8… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed9_1 (Concatenate)    │ (None, 8, 8, 768)      │              0 │ activation_87[0][0],   │
│                           │                        │                │ activation_88[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ concatenate_1             │ (None, 8, 8, 768)      │              0 │ activation_91[0][0],   │
│ (Concatenate)             │                        │                │ activation_92[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ activation_93             │ (None, 8, 8, 192)      │              0 │ batch_normalization_9… │
│ (Activation)              │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ mixed10 (Concatenate)     │ (None, 8, 8, 2048)     │              0 │ activation_85[0][0],   │
│                           │                        │                │ mixed9_1[0][0],        │
│                           │                        │                │ concatenate_1[0][0],   │
│                           │                        │                │ activation_93[0][0]    │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ global_average_pooling2d  │ (None, 2048)           │              0 │ mixed10[0][0]          │
│ (GlobalAveragePooling2D)  │                        │                │                        │
├───────────────────────────┼────────────────────────┼────────────────┼────────────────────────┤
│ dense (Dense)             │ (None, 3)              │          6,147 │ global_average_poolin… │
└───────────────────────────┴────────────────────────┴────────────────┴────────────────────────┘
 Total params: 21,808,931 (83.19 MB)
 Trainable params: 21,774,499 (83.06 MB)
 Non-trainable params: 34,432 (134.50 KB)

print(f'모델의 레이어 수 : {len(model.layers)}')
모델의 레이어 수 : 313

Fine-tuning

  • 모델의 가중치를 그대로 사용할 레이어와 추가 학습할 레이어를 결정합니다.

model.layers
[<InputLayer name=input_layer, built=True>,
 <Conv2D name=conv2d, built=True>,
 <BatchNormalization name=batch_normalization, built=True>,
 <Activation name=activation, built=True>,
 <Conv2D name=conv2d_1, built=True>,
 <BatchNormalization name=batch_normalization_1, built=True>,
 <Activation name=activation_1, built=True>,
 <Conv2D name=conv2d_2, built=True>,
 <BatchNormalization name=batch_normalization_2, built=True>,
 <Activation name=activation_2, built=True>,
 <MaxPooling2D name=max_pooling2d, built=True>,
 <Conv2D name=conv2d_3, built=True>,
 <BatchNormalization name=batch_normalization_3, built=True>,
 <Activation name=activation_3, built=True>,
 <Conv2D name=conv2d_4, built=True>,
 <BatchNormalization name=batch_normalization_4, built=True>,
 <Activation name=activation_4, built=True>,
 <MaxPooling2D name=max_pooling2d_1, built=True>,
 <Conv2D name=conv2d_8, built=True>,
 <BatchNormalization name=batch_normalization_8, built=True>,
 <Activation name=activation_8, built=True>,
 <Conv2D name=conv2d_6, built=True>,
 <Conv2D name=conv2d_9, built=True>,
 <BatchNormalization name=batch_normalization_6, built=True>,
 <BatchNormalization name=batch_normalization_9, built=True>,
 <Activation name=activation_6, built=True>,
 <Activation name=activation_9, built=True>,
 <AveragePooling2D name=average_pooling2d, built=True>,
 <Conv2D name=conv2d_5, built=True>,
 <Conv2D name=conv2d_7, built=True>,
 <Conv2D name=conv2d_10, built=True>,
 <Conv2D name=conv2d_11, built=True>,
 <BatchNormalization name=batch_normalization_5, built=True>,
 <BatchNormalization name=batch_normalization_7, built=True>,
 <BatchNormalization name=batch_normalization_10, built=True>,
 <BatchNormalization name=batch_normalization_11, built=True>,
 <Activation name=activation_5, built=True>,
 <Activation name=activation_7, built=True>,
 <Activation name=activation_10, built=True>,
 <Activation name=activation_11, built=True>,
 <Concatenate name=mixed0, built=True>,
 <Conv2D name=conv2d_15, built=True>,
 <BatchNormalization name=batch_normalization_15, built=True>,
 <Activation name=activation_15, built=True>,
 <Conv2D name=conv2d_13, built=True>,
 <Conv2D name=conv2d_16, built=True>,
 <BatchNormalization name=batch_normalization_13, built=True>,
 <BatchNormalization name=batch_normalization_16, built=True>,
 <Activation name=activation_13, built=True>,
 <Activation name=activation_16, built=True>,
 <AveragePooling2D name=average_pooling2d_1, built=True>,
 <Conv2D name=conv2d_12, built=True>,
 <Conv2D name=conv2d_14, built=True>,
 <Conv2D name=conv2d_17, built=True>,
 <Conv2D name=conv2d_18, built=True>,
 <BatchNormalization name=batch_normalization_12, built=True>,
 <BatchNormalization name=batch_normalization_14, built=True>,
 <BatchNormalization name=batch_normalization_17, built=True>,
 <BatchNormalization name=batch_normalization_18, built=True>,
 <Activation name=activation_12, built=True>,
 <Activation name=activation_14, built=True>,
 <Activation name=activation_17, built=True>,
 <Activation name=activation_18, built=True>,
 <Concatenate name=mixed1, built=True>,
 <Conv2D name=conv2d_22, built=True>,
 <BatchNormalization name=batch_normalization_22, built=True>,
 <Activation name=activation_22, built=True>,
 <Conv2D name=conv2d_20, built=True>,
 <Conv2D name=conv2d_23, built=True>,
 <BatchNormalization name=batch_normalization_20, built=True>,
 <BatchNormalization name=batch_normalization_23, built=True>,
 <Activation name=activation_20, built=True>,
 <Activation name=activation_23, built=True>,
 <AveragePooling2D name=average_pooling2d_2, built=True>,
 <Conv2D name=conv2d_19, built=True>,
 <Conv2D name=conv2d_21, built=True>,
 <Conv2D name=conv2d_24, built=True>,
 <Conv2D name=conv2d_25, built=True>,
 <BatchNormalization name=batch_normalization_19, built=True>,
 <BatchNormalization name=batch_normalization_21, built=True>,
 <BatchNormalization name=batch_normalization_24, built=True>,
 <BatchNormalization name=batch_normalization_25, built=True>,
 <Activation name=activation_19, built=True>,
 <Activation name=activation_21, built=True>,
 <Activation name=activation_24, built=True>,
 <Activation name=activation_25, built=True>,
 <Concatenate name=mixed2, built=True>,
 <Conv2D name=conv2d_27, built=True>,
 <BatchNormalization name=batch_normalization_27, built=True>,
 <Activation name=activation_27, built=True>,
 <Conv2D name=conv2d_28, built=True>,
 <BatchNormalization name=batch_normalization_28, built=True>,
 <Activation name=activation_28, built=True>,
 <Conv2D name=conv2d_26, built=True>,
 <Conv2D name=conv2d_29, built=True>,
 <BatchNormalization name=batch_normalization_26, built=True>,
 <BatchNormalization name=batch_normalization_29, built=True>,
 <Activation name=activation_26, built=True>,
 <Activation name=activation_29, built=True>,
 <MaxPooling2D name=max_pooling2d_2, built=True>,
 <Concatenate name=mixed3, built=True>,
 <Conv2D name=conv2d_34, built=True>,
 <BatchNormalization name=batch_normalization_34, built=True>,
 <Activation name=activation_34, built=True>,
 <Conv2D name=conv2d_35, built=True>,
 <BatchNormalization name=batch_normalization_35, built=True>,
 <Activation name=activation_35, built=True>,
 <Conv2D name=conv2d_31, built=True>,
 <Conv2D name=conv2d_36, built=True>,
 <BatchNormalization name=batch_normalization_31, built=True>,
 <BatchNormalization name=batch_normalization_36, built=True>,
 <Activation name=activation_31, built=True>,
 <Activation name=activation_36, built=True>,
 <Conv2D name=conv2d_32, built=True>,
 <Conv2D name=conv2d_37, built=True>,
 <BatchNormalization name=batch_normalization_32, built=True>,
 <BatchNormalization name=batch_normalization_37, built=True>,
 <Activation name=activation_32, built=True>,
 <Activation name=activation_37, built=True>,
 <AveragePooling2D name=average_pooling2d_3, built=True>,
 <Conv2D name=conv2d_30, built=True>,
 <Conv2D name=conv2d_33, built=True>,
 <Conv2D name=conv2d_38, built=True>,
 <Conv2D name=conv2d_39, built=True>,
 <BatchNormalization name=batch_normalization_30, built=True>,
 <BatchNormalization name=batch_normalization_33, built=True>,
 <BatchNormalization name=batch_normalization_38, built=True>,
 <BatchNormalization name=batch_normalization_39, built=True>,
 <Activation name=activation_30, built=True>,
 <Activation name=activation_33, built=True>,
 <Activation name=activation_38, built=True>,
 <Activation name=activation_39, built=True>,
 <Concatenate name=mixed4, built=True>,
 <Conv2D name=conv2d_44, built=True>,
 <BatchNormalization name=batch_normalization_44, built=True>,
 <Activation name=activation_44, built=True>,
 <Conv2D name=conv2d_45, built=True>,
 <BatchNormalization name=batch_normalization_45, built=True>,
 <Activation name=activation_45, built=True>,
 <Conv2D name=conv2d_41, built=True>,
 <Conv2D name=conv2d_46, built=True>,
 <BatchNormalization name=batch_normalization_41, built=True>,
 <BatchNormalization name=batch_normalization_46, built=True>,
 <Activation name=activation_41, built=True>,
 <Activation name=activation_46, built=True>,
 <Conv2D name=conv2d_42, built=True>,
 <Conv2D name=conv2d_47, built=True>,
 <BatchNormalization name=batch_normalization_42, built=True>,
 <BatchNormalization name=batch_normalization_47, built=True>,
 <Activation name=activation_42, built=True>,
 <Activation name=activation_47, built=True>,
 <AveragePooling2D name=average_pooling2d_4, built=True>,
 <Conv2D name=conv2d_40, built=True>,
 <Conv2D name=conv2d_43, built=True>,
 <Conv2D name=conv2d_48, built=True>,
 <Conv2D name=conv2d_49, built=True>,
 <BatchNormalization name=batch_normalization_40, built=True>,
 <BatchNormalization name=batch_normalization_43, built=True>,
 <BatchNormalization name=batch_normalization_48, built=True>,
 <BatchNormalization name=batch_normalization_49, built=True>,
 <Activation name=activation_40, built=True>,
 <Activation name=activation_43, built=True>,
 <Activation name=activation_48, built=True>,
 <Activation name=activation_49, built=True>,
 <Concatenate name=mixed5, built=True>,
 <Conv2D name=conv2d_54, built=True>,
 <BatchNormalization name=batch_normalization_54, built=True>,
 <Activation name=activation_54, built=True>,
 <Conv2D name=conv2d_55, built=True>,
 <BatchNormalization name=batch_normalization_55, built=True>,
 <Activation name=activation_55, built=True>,
 <Conv2D name=conv2d_51, built=True>,
 <Conv2D name=conv2d_56, built=True>,
 <BatchNormalization name=batch_normalization_51, built=True>,
 <BatchNormalization name=batch_normalization_56, built=True>,
 <Activation name=activation_51, built=True>,
 <Activation name=activation_56, built=True>,
 <Conv2D name=conv2d_52, built=True>,
 <Conv2D name=conv2d_57, built=True>,
 <BatchNormalization name=batch_normalization_52, built=True>,
 <BatchNormalization name=batch_normalization_57, built=True>,
 <Activation name=activation_52, built=True>,
 <Activation name=activation_57, built=True>,
 <AveragePooling2D name=average_pooling2d_5, built=True>,
 <Conv2D name=conv2d_50, built=True>,
 <Conv2D name=conv2d_53, built=True>,
 <Conv2D name=conv2d_58, built=True>,
 <Conv2D name=conv2d_59, built=True>,
 <BatchNormalization name=batch_normalization_50, built=True>,
 <BatchNormalization name=batch_normalization_53, built=True>,
 <BatchNormalization name=batch_normalization_58, built=True>,
 <BatchNormalization name=batch_normalization_59, built=True>,
 <Activation name=activation_50, built=True>,
 <Activation name=activation_53, built=True>,
 <Activation name=activation_58, built=True>,
 <Activation name=activation_59, built=True>,
 <Concatenate name=mixed6, built=True>,
 <Conv2D name=conv2d_64, built=True>,
 <BatchNormalization name=batch_normalization_64, built=True>,
 <Activation name=activation_64, built=True>,
 <Conv2D name=conv2d_65, built=True>,
 <BatchNormalization name=batch_normalization_65, built=True>,
 <Activation name=activation_65, built=True>,
 <Conv2D name=conv2d_61, built=True>,
 <Conv2D name=conv2d_66, built=True>,
 <BatchNormalization name=batch_normalization_61, built=True>,
 <BatchNormalization name=batch_normalization_66, built=True>,
 <Activation name=activation_61, built=True>,
 <Activation name=activation_66, built=True>,
 <Conv2D name=conv2d_62, built=True>,
 <Conv2D name=conv2d_67, built=True>,
 <BatchNormalization name=batch_normalization_62, built=True>,
 <BatchNormalization name=batch_normalization_67, built=True>,
 <Activation name=activation_62, built=True>,
 <Activation name=activation_67, built=True>,
 <AveragePooling2D name=average_pooling2d_6, built=True>,
 <Conv2D name=conv2d_60, built=True>,
 <Conv2D name=conv2d_63, built=True>,
 <Conv2D name=conv2d_68, built=True>,
 <Conv2D name=conv2d_69, built=True>,
 <BatchNormalization name=batch_normalization_60, built=True>,
 <BatchNormalization name=batch_normalization_63, built=True>,
 <BatchNormalization name=batch_normalization_68, built=True>,
 <BatchNormalization name=batch_normalization_69, built=True>,
 <Activation name=activation_60, built=True>,
 <Activation name=activation_63, built=True>,
 <Activation name=activation_68, built=True>,
 <Activation name=activation_69, built=True>,
 <Concatenate name=mixed7, built=True>,
 <Conv2D name=conv2d_72, built=True>,
 <BatchNormalization name=batch_normalization_72, built=True>,
 <Activation name=activation_72, built=True>,
 <Conv2D name=conv2d_73, built=True>,
 <BatchNormalization name=batch_normalization_73, built=True>,
 <Activation name=activation_73, built=True>,
 <Conv2D name=conv2d_70, built=True>,
 <Conv2D name=conv2d_74, built=True>,
 <BatchNormalization name=batch_normalization_70, built=True>,
 <BatchNormalization name=batch_normalization_74, built=True>,
 <Activation name=activation_70, built=True>,
 <Activation name=activation_74, built=True>,
 <Conv2D name=conv2d_71, built=True>,
 <Conv2D name=conv2d_75, built=True>,
 <BatchNormalization name=batch_normalization_71, built=True>,
 <BatchNormalization name=batch_normalization_75, built=True>,
 <Activation name=activation_71, built=True>,
 <Activation name=activation_75, built=True>,
 <MaxPooling2D name=max_pooling2d_3, built=True>,
 <Concatenate name=mixed8, built=True>,
 <Conv2D name=conv2d_80, built=True>,
 <BatchNormalization name=batch_normalization_80, built=True>,
 <Activation name=activation_80, built=True>,
 <Conv2D name=conv2d_77, built=True>,
 <Conv2D name=conv2d_81, built=True>,
 <BatchNormalization name=batch_normalization_77, built=True>,
 <BatchNormalization name=batch_normalization_81, built=True>,
 <Activation name=activation_77, built=True>,
 <Activation name=activation_81, built=True>,
 <Conv2D name=conv2d_78, built=True>,
 <Conv2D name=conv2d_79, built=True>,
 <Conv2D name=conv2d_82, built=True>,
 <Conv2D name=conv2d_83, built=True>,
 <AveragePooling2D name=average_pooling2d_7, built=True>,
 <Conv2D name=conv2d_76, built=True>,
 <BatchNormalization name=batch_normalization_78, built=True>,
 <BatchNormalization name=batch_normalization_79, built=True>,
 <BatchNormalization name=batch_normalization_82, built=True>,
 <BatchNormalization name=batch_normalization_83, built=True>,
 <Conv2D name=conv2d_84, built=True>,
 <BatchNormalization name=batch_normalization_76, built=True>,
 <Activation name=activation_78, built=True>,
 <Activation name=activation_79, built=True>,
 <Activation name=activation_82, built=True>,
 <Activation name=activation_83, built=True>,
 <BatchNormalization name=batch_normalization_84, built=True>,
 <Activation name=activation_76, built=True>,
 <Concatenate name=mixed9_0, built=True>,
 <Concatenate name=concatenate, built=True>,
 <Activation name=activation_84, built=True>,
 <Concatenate name=mixed9, built=True>,
 <Conv2D name=conv2d_89, built=True>,
 <BatchNormalization name=batch_normalization_89, built=True>,
 <Activation name=activation_89, built=True>,
 <Conv2D name=conv2d_86, built=True>,
 <Conv2D name=conv2d_90, built=True>,
 <BatchNormalization name=batch_normalization_86, built=True>,
 <BatchNormalization name=batch_normalization_90, built=True>,
 <Activation name=activation_86, built=True>,
 <Activation name=activation_90, built=True>,
 <Conv2D name=conv2d_87, built=True>,
 <Conv2D name=conv2d_88, built=True>,
 <Conv2D name=conv2d_91, built=True>,
 <Conv2D name=conv2d_92, built=True>,
 <AveragePooling2D name=average_pooling2d_8, built=True>,
 <Conv2D name=conv2d_85, built=True>,
 <BatchNormalization name=batch_normalization_87, built=True>,
 <BatchNormalization name=batch_normalization_88, built=True>,
 <BatchNormalization name=batch_normalization_91, built=True>,
 <BatchNormalization name=batch_normalization_92, built=True>,
 <Conv2D name=conv2d_93, built=True>,
 <BatchNormalization name=batch_normalization_85, built=True>,
 <Activation name=activation_87, built=True>,
 <Activation name=activation_88, built=True>,
 <Activation name=activation_91, built=True>,
 <Activation name=activation_92, built=True>,
 <BatchNormalization name=batch_normalization_93, built=True>,
 <Activation name=activation_85, built=True>,
 <Concatenate name=mixed9_1, built=True>,
 <Concatenate name=concatenate_1, built=True>,
 <Activation name=activation_93, built=True>,
 <Concatenate name=mixed10, built=True>,
 <GlobalAveragePooling2D name=global_average_pooling2d, built=True>,
 <Dense name=dense, built=True>]

for idx, layer in enumerate(model.layers) :
    if idx < 213 :
        layer.trainable = False
    else :
        layer.trainable = True

# 처음부터 학습시키는 것도 아니고,
# 마지막 100개의 레이어만 튜닝 할 것이므로 learning rate를 조금 크게 잡아본다.

model.compile(loss='categorical_crossentropy', metrics=['accuracy'],
             optimizer=keras.optimizers.Adam(learning_rate=0.001) )

Image Data Augmentation & Callbacks


lr_reduction = ReduceLROnPlateau(monitor='val_loss',
                                 patience=4,
                                 verbose=1,
                                 factor=0.5,
                                 min_lr=0.000001)

es = EarlyStopping(monitor='val_loss',
                   min_delta=0, # 개선되고 있다고 판단하기 위한 최소 변화량
                   patience=4,  # 개선 없는 epoch 얼마나 기다려 줄거야
                   verbose=1,
                   restore_best_weights=True)

.fit( )


# 데이터를 넣어서 학습시키자!
hist = model.fit(train_x, train_y,
                 validation_data=(valid_x, valid_y),
                 epochs=1000, verbose=1,
                 callbacks=[es, lr_reduction]
                 )
Epoch 1/1000
/usr/local/lib/python3.10/dist-packages/keras/src/models/functional.py:225: UserWarning: The structure of `inputs` doesn't match the expected structure: ['keras_tensor']. Received: the structure of inputs=*
  warnings.warn(
1/1 ━━━━━━━━━━━━━━━━━━━━ 50s 50s/step - accuracy: 0.5000 - loss: 1.0720 - val_accuracy: 1.0000 - val_loss: 4.4107e-06 - learning_rate: 0.0010
Epoch 2/1000
1/1 ━━━━━━━━━━━━━━━━━━━━ 8s 8s/step - accuracy: 0.6667 - loss: 0.5152 - val_accuracy: 1.0000 - val_loss: 0.0000e+00 - learning_rate: 0.0010
Epoch 3/1000
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 135ms/step - accuracy: 0.6667 - loss: 1.1004 - val_accuracy: 1.0000 - val_loss: 0.0000e+00 - learning_rate: 0.0010
Epoch 4/1000
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 130ms/step - accuracy: 1.0000 - loss: 0.1016 - val_accuracy: 1.0000 - val_loss: 0.0000e+00 - learning_rate: 0.0010
Epoch 5/1000
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 82ms/step - accuracy: 1.0000 - loss: 0.0276
Epoch 5: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 123ms/step - accuracy: 1.0000 - loss: 0.0276 - val_accuracy: 1.0000 - val_loss: 0.0000e+00 - learning_rate: 0.0010
Epoch 6/1000
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 134ms/step - accuracy: 1.0000 - loss: 0.0130 - val_accuracy: 1.0000 - val_loss: 0.0000e+00 - learning_rate: 5.0000e-04
Epoch 6: early stopping
Restoring model weights from the end of the best epoch: 2.

Result


model.evaluate(test_x, test_y) ## [loss, accuracy]
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - accuracy: 1.0000 - loss: 0.0000e+00
[0.0, 1.0]

y_pred = model.predict(test_x)
y_pred
1/1 ━━━━━━━━━━━━━━━━━━━━ 6s 6s/step
array([[1.5360390e-11, 3.3361324e-13, 1.0000000e+00],
       [1.1326544e-25, 2.4143696e-32, 1.0000000e+00]], dtype=float32)

to_names = { v:k for k,v in names.items() }

for i in range(len(test_x)) :
    print('------------------------------------------------------')
    print(f'실제 정답 : {to_names[test_y[i].argmax()]} vs 모델의 예측 : {to_names[y_pred[i].argmax()]} ')
    prob = ''

    for j in to_names :
        string = f'{to_names[j]} : {y_pred[i][j]*100:.2f}%  '
        prob = prob + string
    print(prob)
    plt.imshow(test_xv[i].reshape([299,299,3])/255)
    plt.show()
# 사진은 저작권 문제로 인해 생략하도록 하겠다.
------------------------------------------------------
실제 정답 : 2 vs 모델의 예측 : 2 
1 : 0.00%  3 : 0.00%  2 : 100.00%  

------------------------------------------------------
실제 정답 : 2 vs 모델의 예측 : 2 
1 : 0.00%  3 : 0.00%  2 : 100.00%