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에는 확실히 없을만한 것들로. (이를테면 만화 캐릭터간 비교)
좋은 결과 를 위해서라면 클래스가 확실히 차이나는 이미지로.
도전(역경) 을 위해서라면 클래스가 달라도 비슷비슷해 보이는 이미지로.
순서
구글링하여 이미지를 수집합니다.
본인의 구글 드라이브에 my_data 폴더를 생성합니다.
my_data 폴더 안에 transfer 폴더를 생성합니다.
1번 단계에서 수집한 이미지를 transfer 폴더 안에 업로드하되, 하나의 클래스당 하나의 폴더를 갖도록 정리합니다.
30초 정도 기다립니다.
아래 코드들을 실행합니다.
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%