library(keras3)
= function(x){ t(apply(x, 2, rev)) }
rotate
= function(img, title = ""){
imgPlot = grey.colors(255)
col image(rotate(img), col = col, xlab = "", ylab = "", axes = FALSE,
main = paste0("Label: ", as.character(title)))
}
11 Convolutional Neural Networks (CNN)
The main purpose of convolutional neural networks is image recognition. (Sound can be understood as an image as well!) In a convolutional neural network, we have at least one convolution layer, additional to the normal, fully connected deep neural network layers.
Neurons in a convolution layer are connected only to a small spatially contiguous area of the input layer (receptive field). We use this structure (feature map) to scan the entire features / neurons (e.g. picture). Think of the feature map as a kernel or filter (or imagine a sliding window with weighted pixels) that is used to scan the image. As the name is already indicating, this operation is a convolution in mathematics. The kernel weights are optimized, but we use the same weights across the entire input neurons (shared weights).
The resulting (hidden) convolutional layer after training is called a feature map. You can think of the feature map as a map that shows you where the “shapes” expressed by the kernel appear in the input. One kernel / feature map will not be enough, we typically have many shapes that we want to recognize. Thus, the input layer is typically connected to several feature maps, which can be aggregated and followed by a second layer of feature maps, and so on.
You get one convolution map/layer for each kernel of one convolutional layer.
11.1 Example MNIST
We will show the use of convolutional neural networks with the MNIST data set. This data set is maybe one of the most famous image data sets. It consists of 60,000 handwritten digits from 0-9.
To do so, we define a few helper functions:
The MNIST data set is so famous that there is an automatic download function in Keras:
= dataset_mnist()
data = data$train
train = data$test test
Let’s visualize a few digits:
= par(mfrow = c(1, 3))
oldpar = sapply(1:3, function(x) imgPlot(train$x[x,,], train$y[x])) .n
par(oldpar)
Similar to the normal machine learning workflow, we have to scale the pixels (from 0-255) to the range of \([0, 1]\) and one hot encode the response. For scaling the pixels, we will use arrays instead of matrices. Arrays are called tensors in mathematics and a 2D array/tensor is typically called a matrix.
= array(train$x/255, c(dim(train$x), 1))
train_x = array(test$x/255, c(dim(test$x), 1))
test_x = keras3::to_categorical(train$y)
train_y = keras3::to_categorical(test$y) test_y
The last dimension denotes the number of channels in the image. In our case we have only one channel because the images are black and white.
Most times, we would have at least 3 color channels, for example RGB (red, green, blue) or HSV (hue, saturation, value), sometimes with several additional dimensions like transparency.
To build our convolutional model, we have to specify a kernel. In our case, we will use 16 convolutional kernels (filters) of size \(2\times2\). These are 2D kernels because our images are 2D. For movies for example, one would use 3D kernels (the third dimension would correspond to time and not to the color channels).
= keras_model_sequential(shape(28L, 28L, 1L))
model |>
model layer_conv_2d(filters = 16L,
kernel_size = c(2L, 2L), activation = "relu") |>
layer_max_pooling_2d() |>
layer_conv_2d(filters = 16L, kernel_size = c(3L, 3L), activation = "relu") |>
layer_max_pooling_2d() |>
layer_flatten() |>
layer_dense(100L, activation = "relu") |>
layer_dense(10L, activation = "softmax")
summary(model)
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d (Conv2D) │ (None, 27, 27, 16) │ 80 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D) │ (None, 13, 13, 16) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D) │ (None, 11, 11, 16) │ 2,320 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D) │ (None, 5, 5, 16) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ flatten (Flatten) │ (None, 400) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ dense (Dense) │ (None, 100) │ 40,100 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ dense_1 (Dense) │ (None, 10) │ 1,010 │
└───────────────────────────────────┴──────────────────────────┴───────────────┘
Total params: 43,510 (169.96 KB)
Trainable params: 43,510 (169.96 KB)
Non-trainable params: 0 (0.00 B)
plot(model)
We are currently working on providing a userfriendly interface to CNN in cito:
Configure architecture:
library(cito)
= create_architecture(
architecture conv(n_kernels = 16L, kernel_size = 2L, activation = "relu"),
maxPool(),
conv(n_kernels = 16L, kernel_size = 3L, activation = "relu"),
maxPool(),
linear(100L, activation = "relu")
)
Prepare/download data:
library(torch)
Attaching package: 'torch'
The following object is masked from 'package:keras3':
as_iterator
library(torchvision)
torch_manual_seed(321L)
set.seed(123)
= mnist_dataset(
train_ds ".",
download = TRUE,
train = TRUE,
transform = transform_to_tensor
)
= mnist_dataset(
test_ds ".",
download = TRUE,
train = FALSE,
transform = transform_to_tensor
)
Build dataloader:
= dataloader(train_ds, batch_size = 32, shuffle = TRUE)
train_dl = dataloader(test_ds, batch_size = 32)
test_dl = train_dl$.iter()
first_batch = first_batch$.next()
df
$x$size() df
[1] 32 1 28 28
Build convolutional neural network: We have here to calculate the shapes of our layers on our own:
We start with our input of shape (batch_size, 1, 28, 28)
= df$x
sample $size() sample
[1] 32 1 28 28
First convolutional layer has shape (input channel = 1, number of feature maps = 16, kernel size = 2)
= nn_conv2d(1, 16L, 2L, stride = 1L)
conv1 |> conv1())$size() (sample
[1] 32 16 27 27
Output: batch_size = 32, number of feature maps = 16, dimensions of each feature map = \((27 , 27)\) Wit a kernel size of two and stride = 1 we will lose one pixel in each dimension… Questions:
- What happens if we increase the stride?
- What happens if we increase the kernel size?
Pooling layer summarizes each feature map
|> conv1() |> nnf_max_pool2d(kernel_size = 2L, stride = 2L))$size() (sample
[1] 32 16 13 13
kernel_size = 2L and stride = 2L halfs the pixel dimensions of our image.
Fully connected layer
Now we have to flatten our final output of the convolutional neural network model to use a normal fully connected layer, but to do so we have to calculate the number of inputs for the fully connected layer:
= (sample |> conv1() |>
dims nnf_max_pool2d(kernel_size = 2L, stride = 2L))$size()
# Without the batch size of course.
= prod(dims[-1])
final print(final)
[1] 2704
= nn_linear(final, 10L)
fc |> conv1() |> nnf_max_pool2d(kernel_size = 2L, stride = 2L)
(sample |> torch_flatten(start_dim = 2L) |> fc())$size()
[1] 32 10
Build the network:
= nn_module(
net "mnist",
initialize = function(){
$conv1 = nn_conv2d(1, 16L, 2L)
self$conv2 = nn_conv2d(16L, 16L, 3L)
self$fc1 = nn_linear(400L, 100L)
self$fc2 = nn_linear(100L, 10L)
self
},forward = function(x){
|>
x $conv1() |> # output dim: 16, 27, 27
selfnnf_relu() |>
nnf_max_pool2d(2) |> # output dim: 16, 13, 13
$conv2() |> # output dim: 16, 11, 11
selfnnf_relu() |>
nnf_max_pool2d(2) |> # output dim: 16, 5, 5
torch_flatten(start_dim = 2) |> # 16*5*5
$fc1() |>
selfnnf_relu() |>
$fc2()
self
} )
We additionally used a pooling layer for downsizing the resulting feature maps. Without further specification, a \(2\times2\) pooling layer is taken automatically. Pooling layers take the input feature map and divide it into (in our case) parts of \(2\times2\) size. Then the respective pooling operation is executed. For every input map/layer, you get one (downsized) output map/layer.
As we are using the max pooling layer (there are sever other methods like the mean pooling), only the maximum value of these 4 parts is taken and forwarded further. Example input:
1 2 | 5 8 | 3 6
6 5 | 2 4 | 8 1
------------------------------
9 4 | 3 7 | 2 5
0 3 | 2 7 | 4 9
We use max pooling for every field:
max(1, 2, 6, 5) | max(5, 8, 2, 4) | max(3, 6, 8, 1)
-----------------------------------------------------------
max(9, 4, 0, 3) | max(3, 7, 2, 7) | max(2, 5, 4, 9)
So the resulting pooled information is:
6 | 8 | 8
------------------
9 | 7 | 9
In this example, a \(4\times6\) layer was transformed to a \(2\times3\) layer and thus downsized. This is similar to the biological process called lateral inhibition where active neurons inhibit the activity of neighboring neurons. It’s a loss of information but often very useful for aggregating information and prevent overfitting.
After another convolution and pooling layer, we flatten the output. This means that the following dense layer treats the previous layer as a full layer (so the dense layer is connected to all the weights from the last feature maps). You can think of this as transforming a matrix (2D) into a simple 1D vector. The full vector is then used. After flattening the layer, we can simply use our typical output layer.
The rest is as usual:
First we compile the model:
|>
model ::compile(
keras3optimizer = keras3::optimizer_adamax(0.01),
loss = keras3::loss_categorical_crossentropy
)summary(model)
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d (Conv2D) │ (None, 27, 27, 16) │ 80 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D) │ (None, 13, 13, 16) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D) │ (None, 11, 11, 16) │ 2,320 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D) │ (None, 5, 5, 16) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ flatten (Flatten) │ (None, 400) │ 0 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ dense (Dense) │ (None, 100) │ 40,100 │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ dense_1 (Dense) │ (None, 10) │ 1,010 │
└───────────────────────────────────┴──────────────────────────┴───────────────┘
Total params: 43,510 (169.96 KB)
Trainable params: 43,510 (169.96 KB)
Non-trainable params: 0 (0.00 B)
Then, we train the model:
library(tensorflow)
library(keras3)
= 5L
epochs = 32L
batch_size |>
model fit(
x = train_x,
y = train_y,
epochs = epochs,
batch_size = batch_size,
shuffle = TRUE,
validation_split = 0.2
)
Fit model:
# Note: cito wants the channels on the second position!
= cnn(X = aperm(train_x, c(1, 4, 2, 3)),
model.cito Y = apply(train_y, 1, which.max),
loss = "softmax",
architecture = architecture,
batchsize = 128L,
epochs = 5L,
optimizer = "adam")
Loss at epoch 1: 0.267986, lr: 0.01000
Loss at epoch 2: 0.084369, lr: 0.01000
Loss at epoch 3: 0.068063, lr: 0.01000
Loss at epoch 4: 0.060449, lr: 0.01000
Loss at epoch 5: 0.055224, lr: 0.01000
Visualize model:
plot(model.cito)
Evaluation:
= predict(model.cito, newdata = aperm(test_x, c(1, 4, 2, 3)), type = "response")
pred mean(apply(test_y, 1, which.max) == apply(pred, 1, which.max))
[1] 0.9857
Train model:
library(torch)
torch_manual_seed(321L)
set.seed(123)
= net()
model_torch = optim_adam(params = model_torch$parameters, lr = 0.01)
opt
for(e in 1:3){
= c()
losses ::loop(
corofor(batch in train_dl){
$zero_grad()
opt= model_torch(batch[[1]])
pred = nnf_cross_entropy(pred, batch[[2]], reduction = "mean")
loss $backward()
loss$step()
opt= c(losses, loss$item())
losses
}
)cat(sprintf("Loss at epoch %d: %3f\n", e, mean(losses)))
}
Evaluation:
$eval()
model_torch
= c()
test_losses = 0
total = 0
correct
::loop(
corofor(batch in test_dl){
= model_torch(batch[[1]])
output = batch[[2]]
labels = nnf_cross_entropy(output, labels)
loss = c(test_losses, loss$item())
test_losses = torch_max(output$data(), dim = 2)[[2]]
predicted = total + labels$size(1)
total = correct + (predicted == labels)$sum()$item()
correct
}
)
mean(test_losses)
= correct/total
test_accuracy test_accuracy
11.2 Example CIFAR
CIFAR10 is another famous image classification dataset. It consists of ten classes with colored images (see https://www.cs.toronto.edu/~kriz/cifar.html).
Prepare data, now with 3 channels (colored images):
library(keras3)
= keras3::dataset_cifar10()
data = data$train
train = data$test
test = train$x[1,,,]
image %>%
image image_to_array() %>%
`/`(., 255) %>%
as.raster() %>%
plot()
## normalize pixel to 0-1
= array(train$x/255, c(dim(train$x)))
train_x = array(test$x/255, c(dim(test$x)))
test_x = keras3::to_categorical(train$y)
train_y = keras3::to_categorical(test$y)
test_y = keras_model_sequential(shape(32L, 32L,3L))
model |>
model layer_conv_2d(input_shape = c(32L, 32L,3L),filters = 16L, kernel_size = c(2L,2L), activation = "relu") |>
layer_max_pooling_2d() |>
layer_dropout(0.3) |>
layer_conv_2d(filters = 16L, kernel_size = c(3L,3L), activation = "relu") |>
layer_max_pooling_2d() |>
layer_flatten() |>
layer_dense(10, activation = "softmax")
summary(model)
|>
model compile(
optimizer = optimizer_adamax(),
loss = keras3::loss_categorical_crossentropy
)= callback_early_stopping(patience = 5L)
early = 1L
epochs =20L
batch_size |> fit(
model x = train_x,
y = train_y,
epochs = epochs,
batch_size = batch_size,
shuffle = TRUE,
validation_split = 0.2,
callbacks = c(early)
)
= cifar10_dataset(
train_ds ".",
download = TRUE,
train = TRUE,
transform = transform_to_tensor
)
= cifar10_dataset(
test_ds ".",
download = TRUE,
train = FALSE,
transform = transform_to_tensor
)
= dataloader(train_ds, batch_size = 32, shuffle = TRUE)
train_dl = dataloader(test_ds, batch_size = 32)
test_dl = train_dl$.iter()
first_batch = first_batch$.next()
df
$x$size() df
[1] 32 3 32 32
Model:
= nn_module(
net "mnist",
initialize = function(dropout_rate = 0.3){
$conv1 = nn_conv2d(3, 8L, 2L) # 8, 31, 31 -> 8, 15, 15
self$dropout1 = nn_dropout2d(p = dropout_rate)
self$conv2 = nn_conv2d(8L, 16L, 3L) # 16, 13, 13 -> 16, 6, 6
self$dropout2 = nn_dropout2d(p = dropout_rate)
self$conv3 = nn_conv2d(16L, 32L, 3L) # 32, 4, 4 -> 32, 2, 2
self$dropout3 = nn_dropout2d(p = dropout_rate)
self$fc1 = nn_linear(128L, 10L)
self
},forward = function(x){
|>
x $conv1() |>
selfnnf_relu() |>
$dropout1() |>
selfnnf_max_pool2d(2) |>
$conv2() |>
selfnnf_relu() |>
$dropout2() |>
selfnnf_max_pool2d(2) |>
$conv3() |>
self$dropout3() |>
selfnnf_max_pool2d(2) |>
torch_flatten(start_dim = 2) |>
$fc1()
self
} )
Train model:
= net()
model_torch = optim_adam(params = model_torch$parameters, lr = 0.01)
opt
for(e in 1:3){
= c()
losses ::loop(
corofor(batch in train_dl){
$zero_grad()
opt= model_torch(batch[[1]])
pred = nnf_cross_entropy(pred, batch[[2]], reduction = "mean")
loss $backward()
loss$step()
opt= c(losses, loss$item())
losses
}
)cat(sprintf("Loss at epoch %d: %3f\n", e, mean(losses)))
}
= array(train$x/255, c(dim(train$x)))
train_x = array(test$x/255, c(dim(test$x)))
test_x = keras3::to_categorical(train$y)
train_y = keras3::to_categorical(test$y)
test_y
= aperm(train_x, c(1, 4, 2, 3))
train_x = aperm(test_x, c(1, 4, 2, 3))
test_x
= create_architecture(
architecture conv(n_kernels = 32, kernel_size = 2L, activation = "relu"),
maxPool(),
conv(n_kernels = 16, kernel_size = 3L, activation = "relu"),
maxPool(),
default_dropout = 0.2
)
= cnn(X = train_x,
model.cito Y = apply(train_y, 1, which.max),
loss = "softmax",
architecture = architecture,
batchsize = 128L,
epochs = 5L,
validation = 0.2,
optimizer = "adam",
lr = 0.001)
Loss at epoch 1: training: 1.957, validation: 1.705, lr: 0.00100
Loss at epoch 2: training: 1.732, validation: 1.571, lr: 0.00100
Loss at epoch 3: training: 1.623, validation: 1.468, lr: 0.00100
Loss at epoch 4: training: 1.561, validation: 1.415, lr: 0.00100
Loss at epoch 5: training: 1.526, validation: 1.391, lr: 0.00100
Architecture:
plot(model.cito)
Explainable AI:
library(torch)
= 19
observation = torch::torch_tensor(train_x[1:20,,,], requires_grad = TRUE)
Xt = model.cito$net(Xt)
pred = torch::autograd_grad(pred[,apply(train_y, 1, which.max)[observation],drop=F], Xt, grad_outputs = torch_ones(20, 32))
grads
= par()
old_par par(mfrow = c(2, 2))
for(i in 1:3) fields::image.plot(as.array(grads[[1]]) [observation,i,,])
= aperm(train_x[observation,,,]*255., c(2, 3, 1))
image %>%
image image_to_array() %>%
`/`(., 255) %>%
as.raster() %>%
plot()
par(old_par)
Warning in par(old_par): graphical parameter "cin" cannot be set
Warning in par(old_par): graphical parameter "cra" cannot be set
Warning in par(old_par): graphical parameter "csi" cannot be set
Warning in par(old_par): graphical parameter "cxy" cannot be set
Warning in par(old_par): graphical parameter "din" cannot be set
Warning in par(old_par): graphical parameter "page" cannot be set
11.3 Exercise
Build model:
= nn_module(
net "flower",
initialize = function(dropout_rate = 0.3){
$conv1 = nn_conv2d(3, 8L, 4L) # 8, 77, 77 -> 8, 19, 19
self$dropout1 = nn_dropout2d(p = dropout_rate)
self$fc1 = nn_linear(2888, 10L)
self
},forward = function(x){
|>
x $conv1() |>
selfnnf_relu() |>
$dropout1() |>
selfnnf_max_pool2d(4) |>
torch_flatten(start_dim = 2) |>
$fc1()
self
}
)
= net()
model_torch = optim_adam(params = model_torch$parameters, lr = 0.01)
opt
= tensor_dataset(torch_tensor(train_torch),
dataset torch_tensor(labels+1, dtype = torch_long())
)= torch::dataloader(dataset, batch_size = 50L, shuffle = TRUE)
train_dl
for(e in 1:3){
= c()
losses ::loop(
corofor(batch in train_dl){
$zero_grad()
opt= model_torch(batch[[1]])
pred = nnf_cross_entropy(pred, batch[[2]], reduction = "mean")
loss $backward()
loss$step()
opt= c(losses, loss$item())
losses
}
)cat(sprintf("Loss at epoch %d: %3f\n", e, mean(losses)))
}
Loss at epoch 1: 1.728928
Loss at epoch 2: 1.440591
Loss at epoch 3: 1.339626
Predictions:
# Prediction on training data:
$eval()
model_torch= model_torch(torch_tensor(train_torch))
predictions = nnf_softmax( predictions, 2) |> as_array() # apply link function
predictions = apply(predictions, 1, which.max)
pred ::accuracy(pred - 1L, labels) Metrics
[1] 0.549785
table(pred)
pred
1 2 3 4 5
353 1050 405 853 362
# Prediction for the submission server:
= model_torch(torch_tensor(test_torch))
predictions = nnf_softmax( predictions, 2) |> as_array() # apply link function
predictions
= predictions |> apply(1, which.max) - 1L
pred table(pred)
pred
0 1 2 3 4
135 454 204 371 136
write.csv(data.frame(y = pred), file = "cnn.csv")
Build model:
= keras_model_sequential(shape(80L, 80L, 3L))
model |>
model layer_conv_2d(filters = 4L, kernel_size = 2L) |>
layer_max_pooling_2d() |>
layer_flatten() |>
layer_dense(units = 5L, activation = "softmax")
### Model fitting ###
|>
model compile(loss = loss_categorical_crossentropy,
optimizer = optimizer_adamax(learning_rate = 0.01))
|>
model fit(x = train, y = keras::k_one_hot(labels, 5L))
Registered S3 methods overwritten by 'keras':
method from
as.data.frame.keras_training_history keras3
plot.keras_training_history keras3
print.keras_training_history keras3
r_to_py.R6ClassGenerator keras3
95/95 - 1s - 7ms/step - loss: 2.6087
Predictions:
# Prediction on training data:
= apply(model |> predict(train), 1, which.max) pred
95/95 - 0s - 2ms/step
::accuracy(pred - 1L, labels) Metrics
[1] 0.4985114
table(pred)
pred
1 2 3 4 5
359 882 339 621 822
# Prediction for the submission server:
= model |> predict(test) |> apply(1, which.max) - 1L pred
41/41 - 0s - 3ms/step
table(pred)
pred
0 1 2 3 4
158 382 133 257 370
= create_architecture(
architecture conv(n_kernels = 8L, kernel_size = 2L, activation = "relu"),
maxPool(),
default_dropout = 0.2
)
= cnn(X = aperm(train, c(1, 4, 2, 3)) ,
model.cito Y = labels+1L,
loss = "softmax",
architecture = architecture,
batchsize = 128L,
epochs = 5L,
validation = 0.2,
optimizer = "adam",
lr = 0.001)
Loss at epoch 1: training: 1.527, validation: 1.370, lr: 0.00100
Loss at epoch 2: training: 1.352, validation: 1.273, lr: 0.00100
Loss at epoch 3: training: 1.252, validation: 1.230, lr: 0.00100
Loss at epoch 4: training: 1.152, validation: 1.167, lr: 0.00100
Loss at epoch 5: training: 1.116, validation: 1.123, lr: 0.00100
= predict(model.cito, newdata = aperm(test, c(1, 4, 2, 3)), type = "response") |> apply(1, which.max) - 1L pred
Submission:
write.csv(data.frame(y = pred), file = "cnn.csv")
11.4 Advanced Training Techniques
11.4.1 Data Augmentation
Having to train a convolutional neural network using very little data is a common problem. Data augmentation helps to artificially increase the number of images.
The idea is that a convolutional neural network learns specific structures such as edges from images. Rotating, adding noise, and zooming in and out will preserve the overall key structure we are interested in, but the model will see new images and has to search once again for the key structures.
Luckily, it is very easy to use data augmentation in Keras.
To show this, we will use our flower data set. We have to define a generator object (a specific object which infinitely draws samples from our data set). In the generator we can turn on the data augmentation.
::use_virtualenv("r-keras")
reticulatelibrary(keras3)
library(tensorflow)
library(tfdatasets)
Attaching package: 'tfdatasets'
The following object is masked from 'package:torch':
as_iterator
The following object is masked from 'package:keras3':
shape
= EcoData::dataset_flower()
data = data$train/255
train = data$labels
labels
# data augemention model
= keras_model_sequential()
aug %>%
aug layer_random_flip() %>%
layer_random_rotation(factor = c(-0.5, 0.5)) %>%
layer_random_brightness(factor = c(-0.5, 0.5), value_range = c(0, 1))
aug
Model: "sequential_2"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ random_flip (RandomFlip) │ ? │ 0 (unbuilt) │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ random_rotation (RandomRotation) │ ? │ 0 (unbuilt) │
├───────────────────────────────────┼──────────────────────────┼───────────────┤
│ random_brightness │ ? │ 0 (unbuilt) │
│ (RandomBrightness) │ │ │
└───────────────────────────────────┴──────────────────────────┴───────────────┘
Total params: 0 (0.00 B)
Trainable params: 0 (0.00 B)
Non-trainable params: 0 (0.00 B)
# Prepare datasets
= tfdatasets::tensor_slices_dataset(list(train, to_categorical(labels)))
dataset <- dataset %>%
dataset dataset_map(function(x, y) list(aug(x), y))
<- 64
batch_size
<- dataset |>
train_ds dataset_batch(batch_size) |>
dataset_prefetch(buffer_size = tf$data$AUTOTUNE)
# test!
<- train_ds |>
batch dataset_take(1) |>
as_iterator() |>
iter_next()
as.array(batch[[1]][1,,,]) |>
image_to_array() |>
as.raster() |>
plot()
# model fitting
= keras_model_sequential(shape(80L, 80L, 3L))
model |>
model layer_conv_2d(filters = 4L, kernel_size = 2L) |>
layer_max_pooling_2d() |>
layer_flatten() |>
layer_dense(units = 5L, activation = "softmax")
|>
model ::compile(loss = keras3::loss_categorical_crossentropy,
keras3optimizer = keras3::optimizer_adamax(learning_rate = 0.01))
%>% fit(train_ds, epochs = 2L) model
Epoch 1/2
48/48 - 2s - 39ms/step - loss: 21.2337
Epoch 2/2
48/48 - 1s - 30ms/step - loss: 24.7170
Using data augmentation we can artificially increase the number of images.
In Torch, we have to change the transform function (but only for the train dataloader):
library(torch)
torch_manual_seed(321L)
set.seed(123)
= function(img){
train_transforms |>
img transform_to_tensor() |>
transform_random_horizontal_flip(p = 0.3) |>
transform_random_resized_crop(size = c(28L, 28L)) |>
transform_random_vertical_flip(0.3)
}
= mnist_dataset(".", download = TRUE, train = TRUE,
train_ds transform = train_transforms)
= mnist_dataset(".", download = TRUE, train = FALSE,
test_ds transform = transform_to_tensor)
= dataloader(train_ds, batch_size = 100L, shuffle = TRUE)
train_dl = dataloader(test_ds, batch_size = 100L)
test_dl
= net()
model_torch = optim_adam(params = model_torch$parameters, lr = 0.01)
opt
for(e in 1:1){
= c()
losses ::loop(
corofor(batch in train_dl){
$zero_grad()
opt= model_torch(batch[[1]])
pred = nnf_cross_entropy(pred, batch[[2]], reduction = "mean")
loss $backward()
loss$step()
opt= c(losses, loss$item())
losses
}
)
cat(sprintf("Loss at epoch %d: %3f\n", e, mean(losses)))
}
$eval()
model_torch
= c()
test_losses = 0
total = 0
correct
::loop(
corofor(batch in test_dl){
= model_torch(batch[[1]])
output = batch[[2]]
labels = nnf_cross_entropy(output, labels)
loss = c(test_losses, loss$item())
test_losses = torch_max(output$data(), dim = 2)[[2]]
predicted = total + labels$size(1)
total = correct + (predicted == labels)$sum()$item()
correct
}
)
= correct/total
test_accuracy print(test_accuracy)
11.4.2 Transfer Learning
Another approach to reduce the necessary number of images or to speed up convergence of the models is the use of transfer learning.
The main idea of transfer learning is that all the convolutional layers have mainly one task - learning to identify highly correlated neighboring features. This knowledge is then used for new tasks. The convolutional layers learn structures such as edges in images and only the top layer, the dense layer is the actual classifier of the convolutional neural network for a specific task. Thus, one could think that we could only train the top layer as classifier. To do so, it will be confronted by sets of different edges/structures and has to decide the label based on these.
Again, this sounds very complicated but it is again quite easy with Keras and Torch.
We will do this now with the CIFAR10 data set, so we have to prepare the data:
library(tensorflow)
library(keras3)
= keras3::dataset_cifar10()
data = data$train
train = data$test
test
rm(data)
= train$x[5,,,]
image %>%
image image_to_array() %>%
`/`(., 255) %>%
as.raster() %>%
plot()
= array(train$x/255, c(dim(train$x)))
train_x = array(test$x/255, c(dim(test$x)))
test_x = keras3::to_categorical(train$y)
train_y = keras3::to_categorical(test$y)
test_y
rm(train, test)
Keras provides download functions for all famous architectures/convolutional neural network models which are already trained on the imagenet data set (another famous data set). These trained networks come already without their top layer, so we have to set include_top to false and change the input shape.
= keras3::application_densenet201(include_top = FALSE,
densenet input_shape = c(32L, 32L, 3L))
Now, we will not use a sequential model but just a “keras_model” where we can specify the inputs and outputs. Thereby, the output is our own top layer, but the inputs are the densenet inputs, as these are already pre-trained.
= keras3::keras_model(
model inputs = densenet$input,
outputs = layer_flatten(
layer_dense(densenet$output, units = 10L, activation = "softmax")
)
)
# Notice that this snippet just creates one (!) new layer.
# The densenet's inputs are connected with the model's inputs.
# The densenet's outputs are connected with our own layer (with 10 nodes).
# This layer is also the output layer of the model.
In the next step we want to freeze all layers except for our own last layer. Freezing means that these are not trained: We do not want to train the complete model, we only want to train the last layer. You can check the number of trainable weights via summary(model).
|> keras3::freeze_weights(from = 1, to = length(model$layers) - 2)
model summary(model)
Model: "functional_16"
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃ Connected to ┃ Trai… ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━┩
│ input_layer_4 │ (None, 32, 32, │ 0 │ - │ - │
│ (InputLayer) │ 3) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ zero_padding2d │ (None, 38, 38, │ 0 │ input_layer_4[… │ - │
│ (ZeroPadding2D) │ 3) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv1_conv │ (None, 16, 16, │ 9,408 │ zero_padding2d… │ N │
│ (Conv2D) │ 64) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv1_bn │ (None, 16, 16, │ 256 │ conv1_conv[0][… │ N │
│ (BatchNormalizati… │ 64) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv1_relu │ (None, 16, 16, │ 0 │ conv1_bn[0][0] │ - │
│ (Activation) │ 64) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ zero_padding2d_1 │ (None, 18, 18, │ 0 │ conv1_relu[0][… │ - │
│ (ZeroPadding2D) │ 64) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool1 │ (None, 8, 8, 64) │ 0 │ zero_padding2d… │ - │
│ (MaxPooling2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_0_bn │ (None, 8, 8, 64) │ 256 │ pool1[0][0] │ N │
│ (BatchNormalizati… │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_0_re… │ (None, 8, 8, 64) │ 0 │ conv2_block1_0… │ - │
│ (Activation) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_1_co… │ (None, 8, 8, │ 8,192 │ conv2_block1_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_1_bn │ (None, 8, 8, │ 512 │ conv2_block1_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_1_re… │ (None, 8, 8, │ 0 │ conv2_block1_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block1_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block1_conc… │ (None, 8, 8, 96) │ 0 │ pool1[0][0], │ - │
│ (Concatenate) │ │ │ conv2_block1_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_0_bn │ (None, 8, 8, 96) │ 384 │ conv2_block1_c… │ N │
│ (BatchNormalizati… │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_0_re… │ (None, 8, 8, 96) │ 0 │ conv2_block2_0… │ - │
│ (Activation) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_1_co… │ (None, 8, 8, │ 12,288 │ conv2_block2_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_1_bn │ (None, 8, 8, │ 512 │ conv2_block2_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_1_re… │ (None, 8, 8, │ 0 │ conv2_block2_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block2_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block2_conc… │ (None, 8, 8, │ 0 │ conv2_block1_c… │ - │
│ (Concatenate) │ 128) │ │ conv2_block2_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_0_bn │ (None, 8, 8, │ 512 │ conv2_block2_c… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_0_re… │ (None, 8, 8, │ 0 │ conv2_block3_0… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_1_co… │ (None, 8, 8, │ 16,384 │ conv2_block3_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_1_bn │ (None, 8, 8, │ 512 │ conv2_block3_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_1_re… │ (None, 8, 8, │ 0 │ conv2_block3_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block3_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block3_conc… │ (None, 8, 8, │ 0 │ conv2_block2_c… │ - │
│ (Concatenate) │ 160) │ │ conv2_block3_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_0_bn │ (None, 8, 8, │ 640 │ conv2_block3_c… │ N │
│ (BatchNormalizati… │ 160) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_0_re… │ (None, 8, 8, │ 0 │ conv2_block4_0… │ - │
│ (Activation) │ 160) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_1_co… │ (None, 8, 8, │ 20,480 │ conv2_block4_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_1_bn │ (None, 8, 8, │ 512 │ conv2_block4_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_1_re… │ (None, 8, 8, │ 0 │ conv2_block4_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block4_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block4_conc… │ (None, 8, 8, │ 0 │ conv2_block3_c… │ - │
│ (Concatenate) │ 192) │ │ conv2_block4_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_0_bn │ (None, 8, 8, │ 768 │ conv2_block4_c… │ N │
│ (BatchNormalizati… │ 192) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_0_re… │ (None, 8, 8, │ 0 │ conv2_block5_0… │ - │
│ (Activation) │ 192) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_1_co… │ (None, 8, 8, │ 24,576 │ conv2_block5_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_1_bn │ (None, 8, 8, │ 512 │ conv2_block5_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_1_re… │ (None, 8, 8, │ 0 │ conv2_block5_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block5_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block5_conc… │ (None, 8, 8, │ 0 │ conv2_block4_c… │ - │
│ (Concatenate) │ 224) │ │ conv2_block5_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_0_bn │ (None, 8, 8, │ 896 │ conv2_block5_c… │ N │
│ (BatchNormalizati… │ 224) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_0_re… │ (None, 8, 8, │ 0 │ conv2_block6_0… │ - │
│ (Activation) │ 224) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_1_co… │ (None, 8, 8, │ 28,672 │ conv2_block6_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_1_bn │ (None, 8, 8, │ 512 │ conv2_block6_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_1_re… │ (None, 8, 8, │ 0 │ conv2_block6_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_2_co… │ (None, 8, 8, 32) │ 36,864 │ conv2_block6_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv2_block6_conc… │ (None, 8, 8, │ 0 │ conv2_block5_c… │ - │
│ (Concatenate) │ 256) │ │ conv2_block6_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool2_bn │ (None, 8, 8, │ 1,024 │ conv2_block6_c… │ N │
│ (BatchNormalizati… │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool2_relu │ (None, 8, 8, │ 0 │ pool2_bn[0][0] │ - │
│ (Activation) │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool2_conv │ (None, 8, 8, │ 32,768 │ pool2_relu[0][… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool2_pool │ (None, 4, 4, │ 0 │ pool2_conv[0][… │ - │
│ (AveragePooling2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_0_bn │ (None, 4, 4, │ 512 │ pool2_pool[0][… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_0_re… │ (None, 4, 4, │ 0 │ conv3_block1_0… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_1_co… │ (None, 4, 4, │ 16,384 │ conv3_block1_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_1_bn │ (None, 4, 4, │ 512 │ conv3_block1_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_1_re… │ (None, 4, 4, │ 0 │ conv3_block1_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block1_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block1_conc… │ (None, 4, 4, │ 0 │ pool2_pool[0][… │ - │
│ (Concatenate) │ 160) │ │ conv3_block1_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_0_bn │ (None, 4, 4, │ 640 │ conv3_block1_c… │ N │
│ (BatchNormalizati… │ 160) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_0_re… │ (None, 4, 4, │ 0 │ conv3_block2_0… │ - │
│ (Activation) │ 160) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_1_co… │ (None, 4, 4, │ 20,480 │ conv3_block2_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_1_bn │ (None, 4, 4, │ 512 │ conv3_block2_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_1_re… │ (None, 4, 4, │ 0 │ conv3_block2_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block2_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block2_conc… │ (None, 4, 4, │ 0 │ conv3_block1_c… │ - │
│ (Concatenate) │ 192) │ │ conv3_block2_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_0_bn │ (None, 4, 4, │ 768 │ conv3_block2_c… │ N │
│ (BatchNormalizati… │ 192) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_0_re… │ (None, 4, 4, │ 0 │ conv3_block3_0… │ - │
│ (Activation) │ 192) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_1_co… │ (None, 4, 4, │ 24,576 │ conv3_block3_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_1_bn │ (None, 4, 4, │ 512 │ conv3_block3_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_1_re… │ (None, 4, 4, │ 0 │ conv3_block3_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block3_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block3_conc… │ (None, 4, 4, │ 0 │ conv3_block2_c… │ - │
│ (Concatenate) │ 224) │ │ conv3_block3_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_0_bn │ (None, 4, 4, │ 896 │ conv3_block3_c… │ N │
│ (BatchNormalizati… │ 224) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_0_re… │ (None, 4, 4, │ 0 │ conv3_block4_0… │ - │
│ (Activation) │ 224) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_1_co… │ (None, 4, 4, │ 28,672 │ conv3_block4_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_1_bn │ (None, 4, 4, │ 512 │ conv3_block4_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_1_re… │ (None, 4, 4, │ 0 │ conv3_block4_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block4_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block4_conc… │ (None, 4, 4, │ 0 │ conv3_block3_c… │ - │
│ (Concatenate) │ 256) │ │ conv3_block4_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_0_bn │ (None, 4, 4, │ 1,024 │ conv3_block4_c… │ N │
│ (BatchNormalizati… │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_0_re… │ (None, 4, 4, │ 0 │ conv3_block5_0… │ - │
│ (Activation) │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_1_co… │ (None, 4, 4, │ 32,768 │ conv3_block5_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_1_bn │ (None, 4, 4, │ 512 │ conv3_block5_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_1_re… │ (None, 4, 4, │ 0 │ conv3_block5_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block5_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block5_conc… │ (None, 4, 4, │ 0 │ conv3_block4_c… │ - │
│ (Concatenate) │ 288) │ │ conv3_block5_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_0_bn │ (None, 4, 4, │ 1,152 │ conv3_block5_c… │ N │
│ (BatchNormalizati… │ 288) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_0_re… │ (None, 4, 4, │ 0 │ conv3_block6_0… │ - │
│ (Activation) │ 288) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_1_co… │ (None, 4, 4, │ 36,864 │ conv3_block6_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_1_bn │ (None, 4, 4, │ 512 │ conv3_block6_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_1_re… │ (None, 4, 4, │ 0 │ conv3_block6_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block6_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block6_conc… │ (None, 4, 4, │ 0 │ conv3_block5_c… │ - │
│ (Concatenate) │ 320) │ │ conv3_block6_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_0_bn │ (None, 4, 4, │ 1,280 │ conv3_block6_c… │ N │
│ (BatchNormalizati… │ 320) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_0_re… │ (None, 4, 4, │ 0 │ conv3_block7_0… │ - │
│ (Activation) │ 320) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_1_co… │ (None, 4, 4, │ 40,960 │ conv3_block7_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_1_bn │ (None, 4, 4, │ 512 │ conv3_block7_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_1_re… │ (None, 4, 4, │ 0 │ conv3_block7_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block7_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block7_conc… │ (None, 4, 4, │ 0 │ conv3_block6_c… │ - │
│ (Concatenate) │ 352) │ │ conv3_block7_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_0_bn │ (None, 4, 4, │ 1,408 │ conv3_block7_c… │ N │
│ (BatchNormalizati… │ 352) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_0_re… │ (None, 4, 4, │ 0 │ conv3_block8_0… │ - │
│ (Activation) │ 352) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_1_co… │ (None, 4, 4, │ 45,056 │ conv3_block8_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_1_bn │ (None, 4, 4, │ 512 │ conv3_block8_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_1_re… │ (None, 4, 4, │ 0 │ conv3_block8_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block8_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block8_conc… │ (None, 4, 4, │ 0 │ conv3_block7_c… │ - │
│ (Concatenate) │ 384) │ │ conv3_block8_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_0_bn │ (None, 4, 4, │ 1,536 │ conv3_block8_c… │ N │
│ (BatchNormalizati… │ 384) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_0_re… │ (None, 4, 4, │ 0 │ conv3_block9_0… │ - │
│ (Activation) │ 384) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_1_co… │ (None, 4, 4, │ 49,152 │ conv3_block9_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_1_bn │ (None, 4, 4, │ 512 │ conv3_block9_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_1_re… │ (None, 4, 4, │ 0 │ conv3_block9_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_2_co… │ (None, 4, 4, 32) │ 36,864 │ conv3_block9_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block9_conc… │ (None, 4, 4, │ 0 │ conv3_block8_c… │ - │
│ (Concatenate) │ 416) │ │ conv3_block9_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_0_bn │ (None, 4, 4, │ 1,664 │ conv3_block9_c… │ N │
│ (BatchNormalizati… │ 416) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_0_r… │ (None, 4, 4, │ 0 │ conv3_block10_… │ - │
│ (Activation) │ 416) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_1_c… │ (None, 4, 4, │ 53,248 │ conv3_block10_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_1_bn │ (None, 4, 4, │ 512 │ conv3_block10_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_1_r… │ (None, 4, 4, │ 0 │ conv3_block10_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_2_c… │ (None, 4, 4, 32) │ 36,864 │ conv3_block10_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block10_con… │ (None, 4, 4, │ 0 │ conv3_block9_c… │ - │
│ (Concatenate) │ 448) │ │ conv3_block10_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_0_bn │ (None, 4, 4, │ 1,792 │ conv3_block10_… │ N │
│ (BatchNormalizati… │ 448) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_0_r… │ (None, 4, 4, │ 0 │ conv3_block11_… │ - │
│ (Activation) │ 448) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_1_c… │ (None, 4, 4, │ 57,344 │ conv3_block11_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_1_bn │ (None, 4, 4, │ 512 │ conv3_block11_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_1_r… │ (None, 4, 4, │ 0 │ conv3_block11_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_2_c… │ (None, 4, 4, 32) │ 36,864 │ conv3_block11_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block11_con… │ (None, 4, 4, │ 0 │ conv3_block10_… │ - │
│ (Concatenate) │ 480) │ │ conv3_block11_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_0_bn │ (None, 4, 4, │ 1,920 │ conv3_block11_… │ N │
│ (BatchNormalizati… │ 480) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_0_r… │ (None, 4, 4, │ 0 │ conv3_block12_… │ - │
│ (Activation) │ 480) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_1_c… │ (None, 4, 4, │ 61,440 │ conv3_block12_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_1_bn │ (None, 4, 4, │ 512 │ conv3_block12_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_1_r… │ (None, 4, 4, │ 0 │ conv3_block12_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_2_c… │ (None, 4, 4, 32) │ 36,864 │ conv3_block12_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv3_block12_con… │ (None, 4, 4, │ 0 │ conv3_block11_… │ - │
│ (Concatenate) │ 512) │ │ conv3_block12_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool3_bn │ (None, 4, 4, │ 2,048 │ conv3_block12_… │ N │
│ (BatchNormalizati… │ 512) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool3_relu │ (None, 4, 4, │ 0 │ pool3_bn[0][0] │ - │
│ (Activation) │ 512) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool3_conv │ (None, 4, 4, │ 131,072 │ pool3_relu[0][… │ N │
│ (Conv2D) │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool3_pool │ (None, 2, 2, │ 0 │ pool3_conv[0][… │ - │
│ (AveragePooling2D) │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_0_bn │ (None, 2, 2, │ 1,024 │ pool3_pool[0][… │ N │
│ (BatchNormalizati… │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_0_re… │ (None, 2, 2, │ 0 │ conv4_block1_0… │ - │
│ (Activation) │ 256) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_1_co… │ (None, 2, 2, │ 32,768 │ conv4_block1_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_1_bn │ (None, 2, 2, │ 512 │ conv4_block1_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_1_re… │ (None, 2, 2, │ 0 │ conv4_block1_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block1_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block1_conc… │ (None, 2, 2, │ 0 │ pool3_pool[0][… │ - │
│ (Concatenate) │ 288) │ │ conv4_block1_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_0_bn │ (None, 2, 2, │ 1,152 │ conv4_block1_c… │ N │
│ (BatchNormalizati… │ 288) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_0_re… │ (None, 2, 2, │ 0 │ conv4_block2_0… │ - │
│ (Activation) │ 288) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_1_co… │ (None, 2, 2, │ 36,864 │ conv4_block2_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_1_bn │ (None, 2, 2, │ 512 │ conv4_block2_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_1_re… │ (None, 2, 2, │ 0 │ conv4_block2_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block2_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block2_conc… │ (None, 2, 2, │ 0 │ conv4_block1_c… │ - │
│ (Concatenate) │ 320) │ │ conv4_block2_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_0_bn │ (None, 2, 2, │ 1,280 │ conv4_block2_c… │ N │
│ (BatchNormalizati… │ 320) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_0_re… │ (None, 2, 2, │ 0 │ conv4_block3_0… │ - │
│ (Activation) │ 320) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_1_co… │ (None, 2, 2, │ 40,960 │ conv4_block3_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_1_bn │ (None, 2, 2, │ 512 │ conv4_block3_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_1_re… │ (None, 2, 2, │ 0 │ conv4_block3_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block3_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block3_conc… │ (None, 2, 2, │ 0 │ conv4_block2_c… │ - │
│ (Concatenate) │ 352) │ │ conv4_block3_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_0_bn │ (None, 2, 2, │ 1,408 │ conv4_block3_c… │ N │
│ (BatchNormalizati… │ 352) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_0_re… │ (None, 2, 2, │ 0 │ conv4_block4_0… │ - │
│ (Activation) │ 352) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_1_co… │ (None, 2, 2, │ 45,056 │ conv4_block4_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_1_bn │ (None, 2, 2, │ 512 │ conv4_block4_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_1_re… │ (None, 2, 2, │ 0 │ conv4_block4_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block4_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block4_conc… │ (None, 2, 2, │ 0 │ conv4_block3_c… │ - │
│ (Concatenate) │ 384) │ │ conv4_block4_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_0_bn │ (None, 2, 2, │ 1,536 │ conv4_block4_c… │ N │
│ (BatchNormalizati… │ 384) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_0_re… │ (None, 2, 2, │ 0 │ conv4_block5_0… │ - │
│ (Activation) │ 384) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_1_co… │ (None, 2, 2, │ 49,152 │ conv4_block5_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_1_bn │ (None, 2, 2, │ 512 │ conv4_block5_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_1_re… │ (None, 2, 2, │ 0 │ conv4_block5_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block5_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block5_conc… │ (None, 2, 2, │ 0 │ conv4_block4_c… │ - │
│ (Concatenate) │ 416) │ │ conv4_block5_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_0_bn │ (None, 2, 2, │ 1,664 │ conv4_block5_c… │ N │
│ (BatchNormalizati… │ 416) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_0_re… │ (None, 2, 2, │ 0 │ conv4_block6_0… │ - │
│ (Activation) │ 416) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_1_co… │ (None, 2, 2, │ 53,248 │ conv4_block6_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_1_bn │ (None, 2, 2, │ 512 │ conv4_block6_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_1_re… │ (None, 2, 2, │ 0 │ conv4_block6_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block6_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block6_conc… │ (None, 2, 2, │ 0 │ conv4_block5_c… │ - │
│ (Concatenate) │ 448) │ │ conv4_block6_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_0_bn │ (None, 2, 2, │ 1,792 │ conv4_block6_c… │ N │
│ (BatchNormalizati… │ 448) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_0_re… │ (None, 2, 2, │ 0 │ conv4_block7_0… │ - │
│ (Activation) │ 448) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_1_co… │ (None, 2, 2, │ 57,344 │ conv4_block7_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_1_bn │ (None, 2, 2, │ 512 │ conv4_block7_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_1_re… │ (None, 2, 2, │ 0 │ conv4_block7_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block7_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block7_conc… │ (None, 2, 2, │ 0 │ conv4_block6_c… │ - │
│ (Concatenate) │ 480) │ │ conv4_block7_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_0_bn │ (None, 2, 2, │ 1,920 │ conv4_block7_c… │ N │
│ (BatchNormalizati… │ 480) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_0_re… │ (None, 2, 2, │ 0 │ conv4_block8_0… │ - │
│ (Activation) │ 480) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_1_co… │ (None, 2, 2, │ 61,440 │ conv4_block8_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_1_bn │ (None, 2, 2, │ 512 │ conv4_block8_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_1_re… │ (None, 2, 2, │ 0 │ conv4_block8_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block8_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block8_conc… │ (None, 2, 2, │ 0 │ conv4_block7_c… │ - │
│ (Concatenate) │ 512) │ │ conv4_block8_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_0_bn │ (None, 2, 2, │ 2,048 │ conv4_block8_c… │ N │
│ (BatchNormalizati… │ 512) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_0_re… │ (None, 2, 2, │ 0 │ conv4_block9_0… │ - │
│ (Activation) │ 512) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_1_co… │ (None, 2, 2, │ 65,536 │ conv4_block9_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_1_bn │ (None, 2, 2, │ 512 │ conv4_block9_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_1_re… │ (None, 2, 2, │ 0 │ conv4_block9_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_2_co… │ (None, 2, 2, 32) │ 36,864 │ conv4_block9_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block9_conc… │ (None, 2, 2, │ 0 │ conv4_block8_c… │ - │
│ (Concatenate) │ 544) │ │ conv4_block9_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_0_bn │ (None, 2, 2, │ 2,176 │ conv4_block9_c… │ N │
│ (BatchNormalizati… │ 544) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_0_r… │ (None, 2, 2, │ 0 │ conv4_block10_… │ - │
│ (Activation) │ 544) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_1_c… │ (None, 2, 2, │ 69,632 │ conv4_block10_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_1_bn │ (None, 2, 2, │ 512 │ conv4_block10_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_1_r… │ (None, 2, 2, │ 0 │ conv4_block10_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block10_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block10_con… │ (None, 2, 2, │ 0 │ conv4_block9_c… │ - │
│ (Concatenate) │ 576) │ │ conv4_block10_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_0_bn │ (None, 2, 2, │ 2,304 │ conv4_block10_… │ N │
│ (BatchNormalizati… │ 576) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_0_r… │ (None, 2, 2, │ 0 │ conv4_block11_… │ - │
│ (Activation) │ 576) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_1_c… │ (None, 2, 2, │ 73,728 │ conv4_block11_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_1_bn │ (None, 2, 2, │ 512 │ conv4_block11_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_1_r… │ (None, 2, 2, │ 0 │ conv4_block11_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block11_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block11_con… │ (None, 2, 2, │ 0 │ conv4_block10_… │ - │
│ (Concatenate) │ 608) │ │ conv4_block11_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_0_bn │ (None, 2, 2, │ 2,432 │ conv4_block11_… │ N │
│ (BatchNormalizati… │ 608) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_0_r… │ (None, 2, 2, │ 0 │ conv4_block12_… │ - │
│ (Activation) │ 608) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_1_c… │ (None, 2, 2, │ 77,824 │ conv4_block12_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_1_bn │ (None, 2, 2, │ 512 │ conv4_block12_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_1_r… │ (None, 2, 2, │ 0 │ conv4_block12_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block12_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block12_con… │ (None, 2, 2, │ 0 │ conv4_block11_… │ - │
│ (Concatenate) │ 640) │ │ conv4_block12_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_0_bn │ (None, 2, 2, │ 2,560 │ conv4_block12_… │ N │
│ (BatchNormalizati… │ 640) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_0_r… │ (None, 2, 2, │ 0 │ conv4_block13_… │ - │
│ (Activation) │ 640) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_1_c… │ (None, 2, 2, │ 81,920 │ conv4_block13_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_1_bn │ (None, 2, 2, │ 512 │ conv4_block13_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_1_r… │ (None, 2, 2, │ 0 │ conv4_block13_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block13_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block13_con… │ (None, 2, 2, │ 0 │ conv4_block12_… │ - │
│ (Concatenate) │ 672) │ │ conv4_block13_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_0_bn │ (None, 2, 2, │ 2,688 │ conv4_block13_… │ N │
│ (BatchNormalizati… │ 672) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_0_r… │ (None, 2, 2, │ 0 │ conv4_block14_… │ - │
│ (Activation) │ 672) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_1_c… │ (None, 2, 2, │ 86,016 │ conv4_block14_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_1_bn │ (None, 2, 2, │ 512 │ conv4_block14_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_1_r… │ (None, 2, 2, │ 0 │ conv4_block14_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block14_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block14_con… │ (None, 2, 2, │ 0 │ conv4_block13_… │ - │
│ (Concatenate) │ 704) │ │ conv4_block14_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_0_bn │ (None, 2, 2, │ 2,816 │ conv4_block14_… │ N │
│ (BatchNormalizati… │ 704) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_0_r… │ (None, 2, 2, │ 0 │ conv4_block15_… │ - │
│ (Activation) │ 704) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_1_c… │ (None, 2, 2, │ 90,112 │ conv4_block15_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_1_bn │ (None, 2, 2, │ 512 │ conv4_block15_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_1_r… │ (None, 2, 2, │ 0 │ conv4_block15_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block15_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block15_con… │ (None, 2, 2, │ 0 │ conv4_block14_… │ - │
│ (Concatenate) │ 736) │ │ conv4_block15_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_0_bn │ (None, 2, 2, │ 2,944 │ conv4_block15_… │ N │
│ (BatchNormalizati… │ 736) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_0_r… │ (None, 2, 2, │ 0 │ conv4_block16_… │ - │
│ (Activation) │ 736) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_1_c… │ (None, 2, 2, │ 94,208 │ conv4_block16_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_1_bn │ (None, 2, 2, │ 512 │ conv4_block16_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_1_r… │ (None, 2, 2, │ 0 │ conv4_block16_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block16_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block16_con… │ (None, 2, 2, │ 0 │ conv4_block15_… │ - │
│ (Concatenate) │ 768) │ │ conv4_block16_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_0_bn │ (None, 2, 2, │ 3,072 │ conv4_block16_… │ N │
│ (BatchNormalizati… │ 768) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_0_r… │ (None, 2, 2, │ 0 │ conv4_block17_… │ - │
│ (Activation) │ 768) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_1_c… │ (None, 2, 2, │ 98,304 │ conv4_block17_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_1_bn │ (None, 2, 2, │ 512 │ conv4_block17_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_1_r… │ (None, 2, 2, │ 0 │ conv4_block17_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block17_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block17_con… │ (None, 2, 2, │ 0 │ conv4_block16_… │ - │
│ (Concatenate) │ 800) │ │ conv4_block17_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_0_bn │ (None, 2, 2, │ 3,200 │ conv4_block17_… │ N │
│ (BatchNormalizati… │ 800) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_0_r… │ (None, 2, 2, │ 0 │ conv4_block18_… │ - │
│ (Activation) │ 800) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_1_c… │ (None, 2, 2, │ 102,400 │ conv4_block18_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_1_bn │ (None, 2, 2, │ 512 │ conv4_block18_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_1_r… │ (None, 2, 2, │ 0 │ conv4_block18_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block18_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block18_con… │ (None, 2, 2, │ 0 │ conv4_block17_… │ - │
│ (Concatenate) │ 832) │ │ conv4_block18_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_0_bn │ (None, 2, 2, │ 3,328 │ conv4_block18_… │ N │
│ (BatchNormalizati… │ 832) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_0_r… │ (None, 2, 2, │ 0 │ conv4_block19_… │ - │
│ (Activation) │ 832) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_1_c… │ (None, 2, 2, │ 106,496 │ conv4_block19_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_1_bn │ (None, 2, 2, │ 512 │ conv4_block19_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_1_r… │ (None, 2, 2, │ 0 │ conv4_block19_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block19_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block19_con… │ (None, 2, 2, │ 0 │ conv4_block18_… │ - │
│ (Concatenate) │ 864) │ │ conv4_block19_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_0_bn │ (None, 2, 2, │ 3,456 │ conv4_block19_… │ N │
│ (BatchNormalizati… │ 864) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_0_r… │ (None, 2, 2, │ 0 │ conv4_block20_… │ - │
│ (Activation) │ 864) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_1_c… │ (None, 2, 2, │ 110,592 │ conv4_block20_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_1_bn │ (None, 2, 2, │ 512 │ conv4_block20_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_1_r… │ (None, 2, 2, │ 0 │ conv4_block20_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block20_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block20_con… │ (None, 2, 2, │ 0 │ conv4_block19_… │ - │
│ (Concatenate) │ 896) │ │ conv4_block20_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_0_bn │ (None, 2, 2, │ 3,584 │ conv4_block20_… │ N │
│ (BatchNormalizati… │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_0_r… │ (None, 2, 2, │ 0 │ conv4_block21_… │ - │
│ (Activation) │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_1_c… │ (None, 2, 2, │ 114,688 │ conv4_block21_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_1_bn │ (None, 2, 2, │ 512 │ conv4_block21_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_1_r… │ (None, 2, 2, │ 0 │ conv4_block21_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block21_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block21_con… │ (None, 2, 2, │ 0 │ conv4_block20_… │ - │
│ (Concatenate) │ 928) │ │ conv4_block21_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_0_bn │ (None, 2, 2, │ 3,712 │ conv4_block21_… │ N │
│ (BatchNormalizati… │ 928) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_0_r… │ (None, 2, 2, │ 0 │ conv4_block22_… │ - │
│ (Activation) │ 928) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_1_c… │ (None, 2, 2, │ 118,784 │ conv4_block22_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_1_bn │ (None, 2, 2, │ 512 │ conv4_block22_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_1_r… │ (None, 2, 2, │ 0 │ conv4_block22_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block22_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block22_con… │ (None, 2, 2, │ 0 │ conv4_block21_… │ - │
│ (Concatenate) │ 960) │ │ conv4_block22_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_0_bn │ (None, 2, 2, │ 3,840 │ conv4_block22_… │ N │
│ (BatchNormalizati… │ 960) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_0_r… │ (None, 2, 2, │ 0 │ conv4_block23_… │ - │
│ (Activation) │ 960) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_1_c… │ (None, 2, 2, │ 122,880 │ conv4_block23_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_1_bn │ (None, 2, 2, │ 512 │ conv4_block23_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_1_r… │ (None, 2, 2, │ 0 │ conv4_block23_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block23_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block23_con… │ (None, 2, 2, │ 0 │ conv4_block22_… │ - │
│ (Concatenate) │ 992) │ │ conv4_block23_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_0_bn │ (None, 2, 2, │ 3,968 │ conv4_block23_… │ N │
│ (BatchNormalizati… │ 992) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_0_r… │ (None, 2, 2, │ 0 │ conv4_block24_… │ - │
│ (Activation) │ 992) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_1_c… │ (None, 2, 2, │ 126,976 │ conv4_block24_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_1_bn │ (None, 2, 2, │ 512 │ conv4_block24_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_1_r… │ (None, 2, 2, │ 0 │ conv4_block24_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block24_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block24_con… │ (None, 2, 2, │ 0 │ conv4_block23_… │ - │
│ (Concatenate) │ 1024) │ │ conv4_block24_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_0_bn │ (None, 2, 2, │ 4,096 │ conv4_block24_… │ N │
│ (BatchNormalizati… │ 1024) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_0_r… │ (None, 2, 2, │ 0 │ conv4_block25_… │ - │
│ (Activation) │ 1024) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_1_c… │ (None, 2, 2, │ 131,072 │ conv4_block25_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_1_bn │ (None, 2, 2, │ 512 │ conv4_block25_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_1_r… │ (None, 2, 2, │ 0 │ conv4_block25_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block25_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block25_con… │ (None, 2, 2, │ 0 │ conv4_block24_… │ - │
│ (Concatenate) │ 1056) │ │ conv4_block25_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_0_bn │ (None, 2, 2, │ 4,224 │ conv4_block25_… │ N │
│ (BatchNormalizati… │ 1056) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_0_r… │ (None, 2, 2, │ 0 │ conv4_block26_… │ - │
│ (Activation) │ 1056) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_1_c… │ (None, 2, 2, │ 135,168 │ conv4_block26_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_1_bn │ (None, 2, 2, │ 512 │ conv4_block26_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_1_r… │ (None, 2, 2, │ 0 │ conv4_block26_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block26_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block26_con… │ (None, 2, 2, │ 0 │ conv4_block25_… │ - │
│ (Concatenate) │ 1088) │ │ conv4_block26_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_0_bn │ (None, 2, 2, │ 4,352 │ conv4_block26_… │ N │
│ (BatchNormalizati… │ 1088) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_0_r… │ (None, 2, 2, │ 0 │ conv4_block27_… │ - │
│ (Activation) │ 1088) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_1_c… │ (None, 2, 2, │ 139,264 │ conv4_block27_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_1_bn │ (None, 2, 2, │ 512 │ conv4_block27_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_1_r… │ (None, 2, 2, │ 0 │ conv4_block27_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block27_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block27_con… │ (None, 2, 2, │ 0 │ conv4_block26_… │ - │
│ (Concatenate) │ 1120) │ │ conv4_block27_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_0_bn │ (None, 2, 2, │ 4,480 │ conv4_block27_… │ N │
│ (BatchNormalizati… │ 1120) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_0_r… │ (None, 2, 2, │ 0 │ conv4_block28_… │ - │
│ (Activation) │ 1120) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_1_c… │ (None, 2, 2, │ 143,360 │ conv4_block28_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_1_bn │ (None, 2, 2, │ 512 │ conv4_block28_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_1_r… │ (None, 2, 2, │ 0 │ conv4_block28_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block28_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block28_con… │ (None, 2, 2, │ 0 │ conv4_block27_… │ - │
│ (Concatenate) │ 1152) │ │ conv4_block28_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_0_bn │ (None, 2, 2, │ 4,608 │ conv4_block28_… │ N │
│ (BatchNormalizati… │ 1152) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_0_r… │ (None, 2, 2, │ 0 │ conv4_block29_… │ - │
│ (Activation) │ 1152) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_1_c… │ (None, 2, 2, │ 147,456 │ conv4_block29_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_1_bn │ (None, 2, 2, │ 512 │ conv4_block29_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_1_r… │ (None, 2, 2, │ 0 │ conv4_block29_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block29_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block29_con… │ (None, 2, 2, │ 0 │ conv4_block28_… │ - │
│ (Concatenate) │ 1184) │ │ conv4_block29_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_0_bn │ (None, 2, 2, │ 4,736 │ conv4_block29_… │ N │
│ (BatchNormalizati… │ 1184) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_0_r… │ (None, 2, 2, │ 0 │ conv4_block30_… │ - │
│ (Activation) │ 1184) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_1_c… │ (None, 2, 2, │ 151,552 │ conv4_block30_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_1_bn │ (None, 2, 2, │ 512 │ conv4_block30_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_1_r… │ (None, 2, 2, │ 0 │ conv4_block30_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block30_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block30_con… │ (None, 2, 2, │ 0 │ conv4_block29_… │ - │
│ (Concatenate) │ 1216) │ │ conv4_block30_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_0_bn │ (None, 2, 2, │ 4,864 │ conv4_block30_… │ N │
│ (BatchNormalizati… │ 1216) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_0_r… │ (None, 2, 2, │ 0 │ conv4_block31_… │ - │
│ (Activation) │ 1216) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_1_c… │ (None, 2, 2, │ 155,648 │ conv4_block31_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_1_bn │ (None, 2, 2, │ 512 │ conv4_block31_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_1_r… │ (None, 2, 2, │ 0 │ conv4_block31_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block31_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block31_con… │ (None, 2, 2, │ 0 │ conv4_block30_… │ - │
│ (Concatenate) │ 1248) │ │ conv4_block31_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_0_bn │ (None, 2, 2, │ 4,992 │ conv4_block31_… │ N │
│ (BatchNormalizati… │ 1248) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_0_r… │ (None, 2, 2, │ 0 │ conv4_block32_… │ - │
│ (Activation) │ 1248) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_1_c… │ (None, 2, 2, │ 159,744 │ conv4_block32_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_1_bn │ (None, 2, 2, │ 512 │ conv4_block32_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_1_r… │ (None, 2, 2, │ 0 │ conv4_block32_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block32_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block32_con… │ (None, 2, 2, │ 0 │ conv4_block31_… │ - │
│ (Concatenate) │ 1280) │ │ conv4_block32_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_0_bn │ (None, 2, 2, │ 5,120 │ conv4_block32_… │ N │
│ (BatchNormalizati… │ 1280) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_0_r… │ (None, 2, 2, │ 0 │ conv4_block33_… │ - │
│ (Activation) │ 1280) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_1_c… │ (None, 2, 2, │ 163,840 │ conv4_block33_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_1_bn │ (None, 2, 2, │ 512 │ conv4_block33_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_1_r… │ (None, 2, 2, │ 0 │ conv4_block33_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block33_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block33_con… │ (None, 2, 2, │ 0 │ conv4_block32_… │ - │
│ (Concatenate) │ 1312) │ │ conv4_block33_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_0_bn │ (None, 2, 2, │ 5,248 │ conv4_block33_… │ N │
│ (BatchNormalizati… │ 1312) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_0_r… │ (None, 2, 2, │ 0 │ conv4_block34_… │ - │
│ (Activation) │ 1312) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_1_c… │ (None, 2, 2, │ 167,936 │ conv4_block34_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_1_bn │ (None, 2, 2, │ 512 │ conv4_block34_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_1_r… │ (None, 2, 2, │ 0 │ conv4_block34_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block34_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block34_con… │ (None, 2, 2, │ 0 │ conv4_block33_… │ - │
│ (Concatenate) │ 1344) │ │ conv4_block34_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_0_bn │ (None, 2, 2, │ 5,376 │ conv4_block34_… │ N │
│ (BatchNormalizati… │ 1344) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_0_r… │ (None, 2, 2, │ 0 │ conv4_block35_… │ - │
│ (Activation) │ 1344) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_1_c… │ (None, 2, 2, │ 172,032 │ conv4_block35_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_1_bn │ (None, 2, 2, │ 512 │ conv4_block35_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_1_r… │ (None, 2, 2, │ 0 │ conv4_block35_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block35_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block35_con… │ (None, 2, 2, │ 0 │ conv4_block34_… │ - │
│ (Concatenate) │ 1376) │ │ conv4_block35_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_0_bn │ (None, 2, 2, │ 5,504 │ conv4_block35_… │ N │
│ (BatchNormalizati… │ 1376) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_0_r… │ (None, 2, 2, │ 0 │ conv4_block36_… │ - │
│ (Activation) │ 1376) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_1_c… │ (None, 2, 2, │ 176,128 │ conv4_block36_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_1_bn │ (None, 2, 2, │ 512 │ conv4_block36_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_1_r… │ (None, 2, 2, │ 0 │ conv4_block36_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block36_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block36_con… │ (None, 2, 2, │ 0 │ conv4_block35_… │ - │
│ (Concatenate) │ 1408) │ │ conv4_block36_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_0_bn │ (None, 2, 2, │ 5,632 │ conv4_block36_… │ N │
│ (BatchNormalizati… │ 1408) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_0_r… │ (None, 2, 2, │ 0 │ conv4_block37_… │ - │
│ (Activation) │ 1408) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_1_c… │ (None, 2, 2, │ 180,224 │ conv4_block37_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_1_bn │ (None, 2, 2, │ 512 │ conv4_block37_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_1_r… │ (None, 2, 2, │ 0 │ conv4_block37_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block37_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block37_con… │ (None, 2, 2, │ 0 │ conv4_block36_… │ - │
│ (Concatenate) │ 1440) │ │ conv4_block37_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_0_bn │ (None, 2, 2, │ 5,760 │ conv4_block37_… │ N │
│ (BatchNormalizati… │ 1440) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_0_r… │ (None, 2, 2, │ 0 │ conv4_block38_… │ - │
│ (Activation) │ 1440) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_1_c… │ (None, 2, 2, │ 184,320 │ conv4_block38_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_1_bn │ (None, 2, 2, │ 512 │ conv4_block38_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_1_r… │ (None, 2, 2, │ 0 │ conv4_block38_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block38_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block38_con… │ (None, 2, 2, │ 0 │ conv4_block37_… │ - │
│ (Concatenate) │ 1472) │ │ conv4_block38_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_0_bn │ (None, 2, 2, │ 5,888 │ conv4_block38_… │ N │
│ (BatchNormalizati… │ 1472) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_0_r… │ (None, 2, 2, │ 0 │ conv4_block39_… │ - │
│ (Activation) │ 1472) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_1_c… │ (None, 2, 2, │ 188,416 │ conv4_block39_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_1_bn │ (None, 2, 2, │ 512 │ conv4_block39_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_1_r… │ (None, 2, 2, │ 0 │ conv4_block39_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block39_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block39_con… │ (None, 2, 2, │ 0 │ conv4_block38_… │ - │
│ (Concatenate) │ 1504) │ │ conv4_block39_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_0_bn │ (None, 2, 2, │ 6,016 │ conv4_block39_… │ N │
│ (BatchNormalizati… │ 1504) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_0_r… │ (None, 2, 2, │ 0 │ conv4_block40_… │ - │
│ (Activation) │ 1504) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_1_c… │ (None, 2, 2, │ 192,512 │ conv4_block40_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_1_bn │ (None, 2, 2, │ 512 │ conv4_block40_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_1_r… │ (None, 2, 2, │ 0 │ conv4_block40_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block40_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block40_con… │ (None, 2, 2, │ 0 │ conv4_block39_… │ - │
│ (Concatenate) │ 1536) │ │ conv4_block40_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_0_bn │ (None, 2, 2, │ 6,144 │ conv4_block40_… │ N │
│ (BatchNormalizati… │ 1536) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_0_r… │ (None, 2, 2, │ 0 │ conv4_block41_… │ - │
│ (Activation) │ 1536) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_1_c… │ (None, 2, 2, │ 196,608 │ conv4_block41_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_1_bn │ (None, 2, 2, │ 512 │ conv4_block41_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_1_r… │ (None, 2, 2, │ 0 │ conv4_block41_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block41_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block41_con… │ (None, 2, 2, │ 0 │ conv4_block40_… │ - │
│ (Concatenate) │ 1568) │ │ conv4_block41_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_0_bn │ (None, 2, 2, │ 6,272 │ conv4_block41_… │ N │
│ (BatchNormalizati… │ 1568) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_0_r… │ (None, 2, 2, │ 0 │ conv4_block42_… │ - │
│ (Activation) │ 1568) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_1_c… │ (None, 2, 2, │ 200,704 │ conv4_block42_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_1_bn │ (None, 2, 2, │ 512 │ conv4_block42_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_1_r… │ (None, 2, 2, │ 0 │ conv4_block42_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block42_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block42_con… │ (None, 2, 2, │ 0 │ conv4_block41_… │ - │
│ (Concatenate) │ 1600) │ │ conv4_block42_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_0_bn │ (None, 2, 2, │ 6,400 │ conv4_block42_… │ N │
│ (BatchNormalizati… │ 1600) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_0_r… │ (None, 2, 2, │ 0 │ conv4_block43_… │ - │
│ (Activation) │ 1600) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_1_c… │ (None, 2, 2, │ 204,800 │ conv4_block43_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_1_bn │ (None, 2, 2, │ 512 │ conv4_block43_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_1_r… │ (None, 2, 2, │ 0 │ conv4_block43_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block43_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block43_con… │ (None, 2, 2, │ 0 │ conv4_block42_… │ - │
│ (Concatenate) │ 1632) │ │ conv4_block43_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_0_bn │ (None, 2, 2, │ 6,528 │ conv4_block43_… │ N │
│ (BatchNormalizati… │ 1632) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_0_r… │ (None, 2, 2, │ 0 │ conv4_block44_… │ - │
│ (Activation) │ 1632) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_1_c… │ (None, 2, 2, │ 208,896 │ conv4_block44_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_1_bn │ (None, 2, 2, │ 512 │ conv4_block44_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_1_r… │ (None, 2, 2, │ 0 │ conv4_block44_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block44_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block44_con… │ (None, 2, 2, │ 0 │ conv4_block43_… │ - │
│ (Concatenate) │ 1664) │ │ conv4_block44_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_0_bn │ (None, 2, 2, │ 6,656 │ conv4_block44_… │ N │
│ (BatchNormalizati… │ 1664) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_0_r… │ (None, 2, 2, │ 0 │ conv4_block45_… │ - │
│ (Activation) │ 1664) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_1_c… │ (None, 2, 2, │ 212,992 │ conv4_block45_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_1_bn │ (None, 2, 2, │ 512 │ conv4_block45_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_1_r… │ (None, 2, 2, │ 0 │ conv4_block45_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block45_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block45_con… │ (None, 2, 2, │ 0 │ conv4_block44_… │ - │
│ (Concatenate) │ 1696) │ │ conv4_block45_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_0_bn │ (None, 2, 2, │ 6,784 │ conv4_block45_… │ N │
│ (BatchNormalizati… │ 1696) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_0_r… │ (None, 2, 2, │ 0 │ conv4_block46_… │ - │
│ (Activation) │ 1696) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_1_c… │ (None, 2, 2, │ 217,088 │ conv4_block46_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_1_bn │ (None, 2, 2, │ 512 │ conv4_block46_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_1_r… │ (None, 2, 2, │ 0 │ conv4_block46_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block46_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block46_con… │ (None, 2, 2, │ 0 │ conv4_block45_… │ - │
│ (Concatenate) │ 1728) │ │ conv4_block46_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_0_bn │ (None, 2, 2, │ 6,912 │ conv4_block46_… │ N │
│ (BatchNormalizati… │ 1728) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_0_r… │ (None, 2, 2, │ 0 │ conv4_block47_… │ - │
│ (Activation) │ 1728) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_1_c… │ (None, 2, 2, │ 221,184 │ conv4_block47_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_1_bn │ (None, 2, 2, │ 512 │ conv4_block47_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_1_r… │ (None, 2, 2, │ 0 │ conv4_block47_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block47_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block47_con… │ (None, 2, 2, │ 0 │ conv4_block46_… │ - │
│ (Concatenate) │ 1760) │ │ conv4_block47_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_0_bn │ (None, 2, 2, │ 7,040 │ conv4_block47_… │ N │
│ (BatchNormalizati… │ 1760) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_0_r… │ (None, 2, 2, │ 0 │ conv4_block48_… │ - │
│ (Activation) │ 1760) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_1_c… │ (None, 2, 2, │ 225,280 │ conv4_block48_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_1_bn │ (None, 2, 2, │ 512 │ conv4_block48_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_1_r… │ (None, 2, 2, │ 0 │ conv4_block48_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_2_c… │ (None, 2, 2, 32) │ 36,864 │ conv4_block48_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv4_block48_con… │ (None, 2, 2, │ 0 │ conv4_block47_… │ - │
│ (Concatenate) │ 1792) │ │ conv4_block48_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool4_bn │ (None, 2, 2, │ 7,168 │ conv4_block48_… │ N │
│ (BatchNormalizati… │ 1792) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool4_relu │ (None, 2, 2, │ 0 │ pool4_bn[0][0] │ - │
│ (Activation) │ 1792) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool4_conv │ (None, 2, 2, │ 1,605,632 │ pool4_relu[0][… │ N │
│ (Conv2D) │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ pool4_pool │ (None, 1, 1, │ 0 │ pool4_conv[0][… │ - │
│ (AveragePooling2D) │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_0_bn │ (None, 1, 1, │ 3,584 │ pool4_pool[0][… │ N │
│ (BatchNormalizati… │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_0_re… │ (None, 1, 1, │ 0 │ conv5_block1_0… │ - │
│ (Activation) │ 896) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_1_co… │ (None, 1, 1, │ 114,688 │ conv5_block1_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_1_bn │ (None, 1, 1, │ 512 │ conv5_block1_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_1_re… │ (None, 1, 1, │ 0 │ conv5_block1_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block1_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block1_conc… │ (None, 1, 1, │ 0 │ pool4_pool[0][… │ - │
│ (Concatenate) │ 928) │ │ conv5_block1_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_0_bn │ (None, 1, 1, │ 3,712 │ conv5_block1_c… │ N │
│ (BatchNormalizati… │ 928) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_0_re… │ (None, 1, 1, │ 0 │ conv5_block2_0… │ - │
│ (Activation) │ 928) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_1_co… │ (None, 1, 1, │ 118,784 │ conv5_block2_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_1_bn │ (None, 1, 1, │ 512 │ conv5_block2_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_1_re… │ (None, 1, 1, │ 0 │ conv5_block2_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block2_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block2_conc… │ (None, 1, 1, │ 0 │ conv5_block1_c… │ - │
│ (Concatenate) │ 960) │ │ conv5_block2_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_0_bn │ (None, 1, 1, │ 3,840 │ conv5_block2_c… │ N │
│ (BatchNormalizati… │ 960) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_0_re… │ (None, 1, 1, │ 0 │ conv5_block3_0… │ - │
│ (Activation) │ 960) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_1_co… │ (None, 1, 1, │ 122,880 │ conv5_block3_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_1_bn │ (None, 1, 1, │ 512 │ conv5_block3_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_1_re… │ (None, 1, 1, │ 0 │ conv5_block3_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block3_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block3_conc… │ (None, 1, 1, │ 0 │ conv5_block2_c… │ - │
│ (Concatenate) │ 992) │ │ conv5_block3_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_0_bn │ (None, 1, 1, │ 3,968 │ conv5_block3_c… │ N │
│ (BatchNormalizati… │ 992) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_0_re… │ (None, 1, 1, │ 0 │ conv5_block4_0… │ - │
│ (Activation) │ 992) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_1_co… │ (None, 1, 1, │ 126,976 │ conv5_block4_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_1_bn │ (None, 1, 1, │ 512 │ conv5_block4_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_1_re… │ (None, 1, 1, │ 0 │ conv5_block4_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block4_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block4_conc… │ (None, 1, 1, │ 0 │ conv5_block3_c… │ - │
│ (Concatenate) │ 1024) │ │ conv5_block4_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_0_bn │ (None, 1, 1, │ 4,096 │ conv5_block4_c… │ N │
│ (BatchNormalizati… │ 1024) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_0_re… │ (None, 1, 1, │ 0 │ conv5_block5_0… │ - │
│ (Activation) │ 1024) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_1_co… │ (None, 1, 1, │ 131,072 │ conv5_block5_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_1_bn │ (None, 1, 1, │ 512 │ conv5_block5_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_1_re… │ (None, 1, 1, │ 0 │ conv5_block5_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block5_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block5_conc… │ (None, 1, 1, │ 0 │ conv5_block4_c… │ - │
│ (Concatenate) │ 1056) │ │ conv5_block5_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_0_bn │ (None, 1, 1, │ 4,224 │ conv5_block5_c… │ N │
│ (BatchNormalizati… │ 1056) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_0_re… │ (None, 1, 1, │ 0 │ conv5_block6_0… │ - │
│ (Activation) │ 1056) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_1_co… │ (None, 1, 1, │ 135,168 │ conv5_block6_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_1_bn │ (None, 1, 1, │ 512 │ conv5_block6_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_1_re… │ (None, 1, 1, │ 0 │ conv5_block6_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block6_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block6_conc… │ (None, 1, 1, │ 0 │ conv5_block5_c… │ - │
│ (Concatenate) │ 1088) │ │ conv5_block6_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_0_bn │ (None, 1, 1, │ 4,352 │ conv5_block6_c… │ N │
│ (BatchNormalizati… │ 1088) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_0_re… │ (None, 1, 1, │ 0 │ conv5_block7_0… │ - │
│ (Activation) │ 1088) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_1_co… │ (None, 1, 1, │ 139,264 │ conv5_block7_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_1_bn │ (None, 1, 1, │ 512 │ conv5_block7_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_1_re… │ (None, 1, 1, │ 0 │ conv5_block7_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block7_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block7_conc… │ (None, 1, 1, │ 0 │ conv5_block6_c… │ - │
│ (Concatenate) │ 1120) │ │ conv5_block7_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_0_bn │ (None, 1, 1, │ 4,480 │ conv5_block7_c… │ N │
│ (BatchNormalizati… │ 1120) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_0_re… │ (None, 1, 1, │ 0 │ conv5_block8_0… │ - │
│ (Activation) │ 1120) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_1_co… │ (None, 1, 1, │ 143,360 │ conv5_block8_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_1_bn │ (None, 1, 1, │ 512 │ conv5_block8_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_1_re… │ (None, 1, 1, │ 0 │ conv5_block8_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block8_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block8_conc… │ (None, 1, 1, │ 0 │ conv5_block7_c… │ - │
│ (Concatenate) │ 1152) │ │ conv5_block8_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_0_bn │ (None, 1, 1, │ 4,608 │ conv5_block8_c… │ N │
│ (BatchNormalizati… │ 1152) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_0_re… │ (None, 1, 1, │ 0 │ conv5_block9_0… │ - │
│ (Activation) │ 1152) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_1_co… │ (None, 1, 1, │ 147,456 │ conv5_block9_0… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_1_bn │ (None, 1, 1, │ 512 │ conv5_block9_1… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_1_re… │ (None, 1, 1, │ 0 │ conv5_block9_1… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_2_co… │ (None, 1, 1, 32) │ 36,864 │ conv5_block9_1… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block9_conc… │ (None, 1, 1, │ 0 │ conv5_block8_c… │ - │
│ (Concatenate) │ 1184) │ │ conv5_block9_2… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_0_bn │ (None, 1, 1, │ 4,736 │ conv5_block9_c… │ N │
│ (BatchNormalizati… │ 1184) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_0_r… │ (None, 1, 1, │ 0 │ conv5_block10_… │ - │
│ (Activation) │ 1184) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_1_c… │ (None, 1, 1, │ 151,552 │ conv5_block10_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_1_bn │ (None, 1, 1, │ 512 │ conv5_block10_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_1_r… │ (None, 1, 1, │ 0 │ conv5_block10_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block10_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block10_con… │ (None, 1, 1, │ 0 │ conv5_block9_c… │ - │
│ (Concatenate) │ 1216) │ │ conv5_block10_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_0_bn │ (None, 1, 1, │ 4,864 │ conv5_block10_… │ N │
│ (BatchNormalizati… │ 1216) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_0_r… │ (None, 1, 1, │ 0 │ conv5_block11_… │ - │
│ (Activation) │ 1216) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_1_c… │ (None, 1, 1, │ 155,648 │ conv5_block11_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_1_bn │ (None, 1, 1, │ 512 │ conv5_block11_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_1_r… │ (None, 1, 1, │ 0 │ conv5_block11_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block11_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block11_con… │ (None, 1, 1, │ 0 │ conv5_block10_… │ - │
│ (Concatenate) │ 1248) │ │ conv5_block11_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_0_bn │ (None, 1, 1, │ 4,992 │ conv5_block11_… │ N │
│ (BatchNormalizati… │ 1248) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_0_r… │ (None, 1, 1, │ 0 │ conv5_block12_… │ - │
│ (Activation) │ 1248) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_1_c… │ (None, 1, 1, │ 159,744 │ conv5_block12_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_1_bn │ (None, 1, 1, │ 512 │ conv5_block12_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_1_r… │ (None, 1, 1, │ 0 │ conv5_block12_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block12_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block12_con… │ (None, 1, 1, │ 0 │ conv5_block11_… │ - │
│ (Concatenate) │ 1280) │ │ conv5_block12_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_0_bn │ (None, 1, 1, │ 5,120 │ conv5_block12_… │ N │
│ (BatchNormalizati… │ 1280) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_0_r… │ (None, 1, 1, │ 0 │ conv5_block13_… │ - │
│ (Activation) │ 1280) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_1_c… │ (None, 1, 1, │ 163,840 │ conv5_block13_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_1_bn │ (None, 1, 1, │ 512 │ conv5_block13_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_1_r… │ (None, 1, 1, │ 0 │ conv5_block13_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block13_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block13_con… │ (None, 1, 1, │ 0 │ conv5_block12_… │ - │
│ (Concatenate) │ 1312) │ │ conv5_block13_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_0_bn │ (None, 1, 1, │ 5,248 │ conv5_block13_… │ N │
│ (BatchNormalizati… │ 1312) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_0_r… │ (None, 1, 1, │ 0 │ conv5_block14_… │ - │
│ (Activation) │ 1312) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_1_c… │ (None, 1, 1, │ 167,936 │ conv5_block14_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_1_bn │ (None, 1, 1, │ 512 │ conv5_block14_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_1_r… │ (None, 1, 1, │ 0 │ conv5_block14_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block14_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block14_con… │ (None, 1, 1, │ 0 │ conv5_block13_… │ - │
│ (Concatenate) │ 1344) │ │ conv5_block14_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_0_bn │ (None, 1, 1, │ 5,376 │ conv5_block14_… │ N │
│ (BatchNormalizati… │ 1344) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_0_r… │ (None, 1, 1, │ 0 │ conv5_block15_… │ - │
│ (Activation) │ 1344) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_1_c… │ (None, 1, 1, │ 172,032 │ conv5_block15_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_1_bn │ (None, 1, 1, │ 512 │ conv5_block15_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_1_r… │ (None, 1, 1, │ 0 │ conv5_block15_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block15_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block15_con… │ (None, 1, 1, │ 0 │ conv5_block14_… │ - │
│ (Concatenate) │ 1376) │ │ conv5_block15_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_0_bn │ (None, 1, 1, │ 5,504 │ conv5_block15_… │ N │
│ (BatchNormalizati… │ 1376) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_0_r… │ (None, 1, 1, │ 0 │ conv5_block16_… │ - │
│ (Activation) │ 1376) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_1_c… │ (None, 1, 1, │ 176,128 │ conv5_block16_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_1_bn │ (None, 1, 1, │ 512 │ conv5_block16_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_1_r… │ (None, 1, 1, │ 0 │ conv5_block16_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block16_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block16_con… │ (None, 1, 1, │ 0 │ conv5_block15_… │ - │
│ (Concatenate) │ 1408) │ │ conv5_block16_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_0_bn │ (None, 1, 1, │ 5,632 │ conv5_block16_… │ N │
│ (BatchNormalizati… │ 1408) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_0_r… │ (None, 1, 1, │ 0 │ conv5_block17_… │ - │
│ (Activation) │ 1408) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_1_c… │ (None, 1, 1, │ 180,224 │ conv5_block17_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_1_bn │ (None, 1, 1, │ 512 │ conv5_block17_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_1_r… │ (None, 1, 1, │ 0 │ conv5_block17_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block17_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block17_con… │ (None, 1, 1, │ 0 │ conv5_block16_… │ - │
│ (Concatenate) │ 1440) │ │ conv5_block17_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_0_bn │ (None, 1, 1, │ 5,760 │ conv5_block17_… │ N │
│ (BatchNormalizati… │ 1440) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_0_r… │ (None, 1, 1, │ 0 │ conv5_block18_… │ - │
│ (Activation) │ 1440) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_1_c… │ (None, 1, 1, │ 184,320 │ conv5_block18_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_1_bn │ (None, 1, 1, │ 512 │ conv5_block18_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_1_r… │ (None, 1, 1, │ 0 │ conv5_block18_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block18_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block18_con… │ (None, 1, 1, │ 0 │ conv5_block17_… │ - │
│ (Concatenate) │ 1472) │ │ conv5_block18_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_0_bn │ (None, 1, 1, │ 5,888 │ conv5_block18_… │ N │
│ (BatchNormalizati… │ 1472) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_0_r… │ (None, 1, 1, │ 0 │ conv5_block19_… │ - │
│ (Activation) │ 1472) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_1_c… │ (None, 1, 1, │ 188,416 │ conv5_block19_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_1_bn │ (None, 1, 1, │ 512 │ conv5_block19_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_1_r… │ (None, 1, 1, │ 0 │ conv5_block19_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block19_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block19_con… │ (None, 1, 1, │ 0 │ conv5_block18_… │ - │
│ (Concatenate) │ 1504) │ │ conv5_block19_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_0_bn │ (None, 1, 1, │ 6,016 │ conv5_block19_… │ N │
│ (BatchNormalizati… │ 1504) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_0_r… │ (None, 1, 1, │ 0 │ conv5_block20_… │ - │
│ (Activation) │ 1504) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_1_c… │ (None, 1, 1, │ 192,512 │ conv5_block20_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_1_bn │ (None, 1, 1, │ 512 │ conv5_block20_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_1_r… │ (None, 1, 1, │ 0 │ conv5_block20_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block20_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block20_con… │ (None, 1, 1, │ 0 │ conv5_block19_… │ - │
│ (Concatenate) │ 1536) │ │ conv5_block20_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_0_bn │ (None, 1, 1, │ 6,144 │ conv5_block20_… │ N │
│ (BatchNormalizati… │ 1536) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_0_r… │ (None, 1, 1, │ 0 │ conv5_block21_… │ - │
│ (Activation) │ 1536) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_1_c… │ (None, 1, 1, │ 196,608 │ conv5_block21_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_1_bn │ (None, 1, 1, │ 512 │ conv5_block21_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_1_r… │ (None, 1, 1, │ 0 │ conv5_block21_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block21_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block21_con… │ (None, 1, 1, │ 0 │ conv5_block20_… │ - │
│ (Concatenate) │ 1568) │ │ conv5_block21_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_0_bn │ (None, 1, 1, │ 6,272 │ conv5_block21_… │ N │
│ (BatchNormalizati… │ 1568) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_0_r… │ (None, 1, 1, │ 0 │ conv5_block22_… │ - │
│ (Activation) │ 1568) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_1_c… │ (None, 1, 1, │ 200,704 │ conv5_block22_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_1_bn │ (None, 1, 1, │ 512 │ conv5_block22_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_1_r… │ (None, 1, 1, │ 0 │ conv5_block22_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block22_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block22_con… │ (None, 1, 1, │ 0 │ conv5_block21_… │ - │
│ (Concatenate) │ 1600) │ │ conv5_block22_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_0_bn │ (None, 1, 1, │ 6,400 │ conv5_block22_… │ N │
│ (BatchNormalizati… │ 1600) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_0_r… │ (None, 1, 1, │ 0 │ conv5_block23_… │ - │
│ (Activation) │ 1600) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_1_c… │ (None, 1, 1, │ 204,800 │ conv5_block23_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_1_bn │ (None, 1, 1, │ 512 │ conv5_block23_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_1_r… │ (None, 1, 1, │ 0 │ conv5_block23_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block23_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block23_con… │ (None, 1, 1, │ 0 │ conv5_block22_… │ - │
│ (Concatenate) │ 1632) │ │ conv5_block23_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_0_bn │ (None, 1, 1, │ 6,528 │ conv5_block23_… │ N │
│ (BatchNormalizati… │ 1632) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_0_r… │ (None, 1, 1, │ 0 │ conv5_block24_… │ - │
│ (Activation) │ 1632) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_1_c… │ (None, 1, 1, │ 208,896 │ conv5_block24_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_1_bn │ (None, 1, 1, │ 512 │ conv5_block24_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_1_r… │ (None, 1, 1, │ 0 │ conv5_block24_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block24_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block24_con… │ (None, 1, 1, │ 0 │ conv5_block23_… │ - │
│ (Concatenate) │ 1664) │ │ conv5_block24_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_0_bn │ (None, 1, 1, │ 6,656 │ conv5_block24_… │ N │
│ (BatchNormalizati… │ 1664) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_0_r… │ (None, 1, 1, │ 0 │ conv5_block25_… │ - │
│ (Activation) │ 1664) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_1_c… │ (None, 1, 1, │ 212,992 │ conv5_block25_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_1_bn │ (None, 1, 1, │ 512 │ conv5_block25_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_1_r… │ (None, 1, 1, │ 0 │ conv5_block25_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block25_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block25_con… │ (None, 1, 1, │ 0 │ conv5_block24_… │ - │
│ (Concatenate) │ 1696) │ │ conv5_block25_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_0_bn │ (None, 1, 1, │ 6,784 │ conv5_block25_… │ N │
│ (BatchNormalizati… │ 1696) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_0_r… │ (None, 1, 1, │ 0 │ conv5_block26_… │ - │
│ (Activation) │ 1696) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_1_c… │ (None, 1, 1, │ 217,088 │ conv5_block26_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_1_bn │ (None, 1, 1, │ 512 │ conv5_block26_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_1_r… │ (None, 1, 1, │ 0 │ conv5_block26_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block26_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block26_con… │ (None, 1, 1, │ 0 │ conv5_block25_… │ - │
│ (Concatenate) │ 1728) │ │ conv5_block26_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_0_bn │ (None, 1, 1, │ 6,912 │ conv5_block26_… │ N │
│ (BatchNormalizati… │ 1728) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_0_r… │ (None, 1, 1, │ 0 │ conv5_block27_… │ - │
│ (Activation) │ 1728) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_1_c… │ (None, 1, 1, │ 221,184 │ conv5_block27_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_1_bn │ (None, 1, 1, │ 512 │ conv5_block27_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_1_r… │ (None, 1, 1, │ 0 │ conv5_block27_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block27_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block27_con… │ (None, 1, 1, │ 0 │ conv5_block26_… │ - │
│ (Concatenate) │ 1760) │ │ conv5_block27_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_0_bn │ (None, 1, 1, │ 7,040 │ conv5_block27_… │ N │
│ (BatchNormalizati… │ 1760) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_0_r… │ (None, 1, 1, │ 0 │ conv5_block28_… │ - │
│ (Activation) │ 1760) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_1_c… │ (None, 1, 1, │ 225,280 │ conv5_block28_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_1_bn │ (None, 1, 1, │ 512 │ conv5_block28_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_1_r… │ (None, 1, 1, │ 0 │ conv5_block28_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block28_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block28_con… │ (None, 1, 1, │ 0 │ conv5_block27_… │ - │
│ (Concatenate) │ 1792) │ │ conv5_block28_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_0_bn │ (None, 1, 1, │ 7,168 │ conv5_block28_… │ N │
│ (BatchNormalizati… │ 1792) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_0_r… │ (None, 1, 1, │ 0 │ conv5_block29_… │ - │
│ (Activation) │ 1792) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_1_c… │ (None, 1, 1, │ 229,376 │ conv5_block29_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_1_bn │ (None, 1, 1, │ 512 │ conv5_block29_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_1_r… │ (None, 1, 1, │ 0 │ conv5_block29_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block29_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block29_con… │ (None, 1, 1, │ 0 │ conv5_block28_… │ - │
│ (Concatenate) │ 1824) │ │ conv5_block29_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_0_bn │ (None, 1, 1, │ 7,296 │ conv5_block29_… │ N │
│ (BatchNormalizati… │ 1824) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_0_r… │ (None, 1, 1, │ 0 │ conv5_block30_… │ - │
│ (Activation) │ 1824) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_1_c… │ (None, 1, 1, │ 233,472 │ conv5_block30_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_1_bn │ (None, 1, 1, │ 512 │ conv5_block30_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_1_r… │ (None, 1, 1, │ 0 │ conv5_block30_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block30_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block30_con… │ (None, 1, 1, │ 0 │ conv5_block29_… │ - │
│ (Concatenate) │ 1856) │ │ conv5_block30_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_0_bn │ (None, 1, 1, │ 7,424 │ conv5_block30_… │ N │
│ (BatchNormalizati… │ 1856) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_0_r… │ (None, 1, 1, │ 0 │ conv5_block31_… │ - │
│ (Activation) │ 1856) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_1_c… │ (None, 1, 1, │ 237,568 │ conv5_block31_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_1_bn │ (None, 1, 1, │ 512 │ conv5_block31_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_1_r… │ (None, 1, 1, │ 0 │ conv5_block31_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block31_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block31_con… │ (None, 1, 1, │ 0 │ conv5_block30_… │ - │
│ (Concatenate) │ 1888) │ │ conv5_block31_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_0_bn │ (None, 1, 1, │ 7,552 │ conv5_block31_… │ N │
│ (BatchNormalizati… │ 1888) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_0_r… │ (None, 1, 1, │ 0 │ conv5_block32_… │ - │
│ (Activation) │ 1888) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_1_c… │ (None, 1, 1, │ 241,664 │ conv5_block32_… │ N │
│ (Conv2D) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_1_bn │ (None, 1, 1, │ 512 │ conv5_block32_… │ N │
│ (BatchNormalizati… │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_1_r… │ (None, 1, 1, │ 0 │ conv5_block32_… │ - │
│ (Activation) │ 128) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_2_c… │ (None, 1, 1, 32) │ 36,864 │ conv5_block32_… │ N │
│ (Conv2D) │ │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ conv5_block32_con… │ (None, 1, 1, │ 0 │ conv5_block31_… │ - │
│ (Concatenate) │ 1920) │ │ conv5_block32_… │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ bn │ (None, 1, 1, │ 7,680 │ conv5_block32_… │ N │
│ (BatchNormalizati… │ 1920) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ relu (Activation) │ (None, 1, 1, │ 0 │ bn[0][0] │ - │
│ │ 1920) │ │ │ │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ dense_4 (Dense) │ (None, 1, 1, 10) │ 19,210 │ relu[0][0] │ Y │
├────────────────────┼──────────────────┼────────────┼─────────────────┼───────┤
│ flatten_3 │ (None, 10) │ 0 │ dense_4[0][0] │ - │
│ (Flatten) │ │ │ │ │
└────────────────────┴──────────────────┴────────────┴─────────────────┴───────┘
Total params: 18,341,194 (69.97 MB)
Trainable params: 19,210 (75.04 KB)
Non-trainable params: 18,321,984 (69.89 MB)
And then the usual training:
library(tensorflow)
library(keras3)
|>
model ::compile(loss = keras3::loss_categorical_crossentropy,
keras3optimizer = optimizer_adamax())
|>
model fit(
x = train_x,
y = train_y,
epochs = 1L,
batch_size = 32L,
shuffle = TRUE,
validation_split = 0.2
)
= array(train$x/255, c(dim(train$x)))
train_x = array(test$x/255, c(dim(test$x)))
test_x =train$y
train_y = test$y
test_y
= aperm(train_x, c(1, 4, 2, 3))
train_x = aperm(test_x, c(1, 4, 2, 3))
test_x
<- create_architecture(transfer("resnet18"))
transfer_architecture <- cnn(train_x, train_y+1, transfer_architecture, loss = "softmax",
resnet optimizer = "adam",
epochs = 1, validation = 0.1, lr = 0.001)
library(torchvision)
library(torch)
torch_manual_seed(321L)
set.seed(123)
= cifar10_dataset(".", download = TRUE, train = TRUE,
train_ds transform = transform_to_tensor)
= cifar10_dataset(".", download = TRUE, train = FALSE,
test_ds transform = transform_to_tensor)
= dataloader(train_ds, batch_size = 100L, shuffle = TRUE)
train_dl = dataloader(test_ds, batch_size = 100L)
test_dl
= model_resnet18(pretrained = TRUE)
model_torch
# We will set all model parameters to constant values:
$parameters |>
model_torch::walk(function(param) param$requires_grad_(FALSE))
purrr
# Let's replace the last layer (last layer is named 'fc') with our own layer:
= model_torch$fc$in_features
inFeat $fc = nn_linear(inFeat, out_features = 10L)
model_torch
= optim_adam(params = model_torch$parameters, lr = 0.01)
opt
for(e in 1:1){
= c()
losses ::loop(
corofor(batch in train_dl){
$zero_grad()
opt= model_torch(batch[[1]])
pred = nnf_cross_entropy(pred, batch[[2]], reduction = "mean")
loss $backward()
loss$step()
opt= c(losses, loss$item())
losses
}
)
cat(sprintf("Loss at epoch %d: %3f\n", e, mean(losses)))
}
$eval()
model_torch
= c()
test_losses = 0
total = 0
correct
::loop(
corofor(batch in test_dl){
= model_torch(batch[[1]])
output = batch[[2]]
labels = nnf_cross_entropy(output, labels)
loss = c(test_losses, loss$item())
test_losses = torch_max(output$data(), dim = 2)[[2]]
predicted = total + labels$size(1)
total = correct + (predicted == labels)$sum()$item()
correct
}
)
= correct/total
test_accuracy print(test_accuracy)
11.4.3 Example: Flower dataset
Let’s do that with our flower data set:
library(keras3)
library(tensorflow)
= EcoData::dataset_flower()
data = data$train/255
train = data$labels
labels
# data augemention model
= keras_model_sequential()
aug %>%
aug layer_random_flip() %>%
layer_random_rotation(factor = c(-0.5, 0.5)) %>%
layer_random_brightness(factor = c(-0.5, 0.5), value_range = c(0, 1))
aug
# Prepare datasets
= tfdatasets::tensor_slices_dataset(list(train, to_categorical(labels)))
dataset <- dataset %>%
dataset dataset_map(function(x, y) list(aug(x), y))
<- 64
batch_size
<- dataset |>
train_ds dataset_batch(batch_size) |>
dataset_prefetch(buffer_size = tf$data$AUTOTUNE)
# Transfer learning
# weights were trained to imagenet
= keras3::application_convnext_small(include_top = FALSE,
pretrained_model input_shape = c(80L, 80L, 3L))
# pretrained_model
::freeze_weights(pretrained_model)
keras3
pretrained_model
# Build model
= keras_model(inputs = pretrained_model$input,
model outputs = pretrained_model$output |>
layer_flatten() |>
layer_dropout(0.2) |>
layer_dense(units = 5L, activation = "softmax")
)%>% freeze_weights(from = 1, to = length(model$layers)-1)
model
|>
model ::compile(loss = loss_categorical_crossentropy,
keras3optimizer = keras3::optimizer_rmsprop(learning_rate = 0.0005))
|>
model fit(train_ds, epochs = 5L)
= EcoData::dataset_flower()
data = data$train/255
train = aperm(train, c(1, 4, 2, 3))
train = data$labels
labels
<- create_architecture(transfer("resnet18"))
transfer_architecture <- cnn(train, labels+1, transfer_architecture, loss = "softmax",
resnet optimizer = "adam",
epochs = 1, validation = 0.1, lr = 0.001)
library(keras3)
library(tensorflow)
= EcoData::dataset_flower()
data = data$train/255
train = data$labels
labels
= aperm(train, c(1, 4, 2, 3))
train
= function(img){
train_transforms |>
img transform_random_horizontal_flip(p = 0.3) |>
transform_random_resized_crop(size = c(28L, 28L)) |>
transform_random_vertical_flip(0.3)
}
## model
= model_resnet18(pretrained = TRUE)
model_torch
# We will set all model parameters to constant values:
$parameters |>
model_torch::walk(function(param) param$requires_grad_(FALSE))
purrr
# Let's replace the last layer (last layer is named 'fc') with our own layer:
= model_torch$fc$in_features
inFeat $fc = nn_linear(inFeat, out_features = 10L)
model_torch
= nn_module(
net_pretrained initialize = function(rate = 0.5, freeze_weights = TRUE) {
= model_resnet18(pretrained = TRUE)
pretrained_model if(freeze_weights) {
$parameters |>
pretrained_model::walk(function(param) param$requires_grad_(FALSE))
purrr
}$pretrained_model = pretrained_model
self$dropout = nn_dropout(rate)
self$output_layer = nn_linear(pretrained_model$fc$out_features, 5L)
self
},forward = function(x) {
|> self$pretrained_model() |> self$dropout() |> self$output_layer()
x
} )
# dataloaders
= sample.int(dim(train)[1], 2500)
train_indices = train[train_indices,,,] |> torch_tensor()
Xtorch = (labels[train_indices] + 1L) |> torch_tensor(dtype=torch_long())
Ytorch
= train[-train_indices,,,] |> torch_tensor()
Xtorch_test = (labels[-train_indices] + 1L) |> torch_tensor(dtype=torch_long())
Ytorch_test
# setup/define our dataset
= tensor_dataset(Xtorch, Ytorch)
dataset_train = tensor_dataset(Xtorch_test, Ytorch_test)
dataset_val
# dataloaders --> batch samplers
= torch::dataloader(dataset_train, batch_size = 150L, shuffle = TRUE)
train_dl = torch::dataloader(dataset_val, batch_size = 150L, shuffle = FALSE) val_dl
= net_pretrained()
model
# l2 regularization
= optim_adam(params = model$parameters, lr = 0.01, weight_decay = 0.001)
opt
= 5L
epochs
= overall_val_loss = c()
overall_train_loss for(e in 1:epochs) {
= losses_val = c()
losses
$train() # -> dropout is on
model::loop(
corofor(batch in train_dl) {
= train_transforms(batch[[1]]) # Feature matrix/tensor
x = batch[[2]] # Response matrix/tensor
y $zero_grad() # reset optimizer
opt= model(x)
pred = nnf_cross_entropy(pred, y)
loss $backward()
loss$step() # update weights
opt= c(losses, loss$item())
losses
}
)
# calculate validation loss after each epoch
$eval() # dropout is off
model::loop(
corofor(batch in val_dl) {
= batch[[1]] # Feature matrix/tensor
x = batch[[2]] # Response matrix/tensor
y = model(x)
pred = nnf_cross_entropy(pred, y)
loss = c(losses_val, loss$item())
losses_val
}
) = c(overall_train_loss, mean(losses))
overall_train_loss = c(overall_val_loss, mean(losses_val))
overall_val_loss cat(sprintf("Loss at epoch: %d train: %3f eval: %3f\n", e, mean(losses), mean(losses_val)))
}
Loss at epoch: 1 train: 4.074880 eval: 4.929163
Loss at epoch: 2 train: 4.113103 eval: 18.013161
Loss at epoch: 3 train: 4.384264 eval: 46.364286
Loss at epoch: 4 train: 3.943507 eval: 54.921122
Loss at epoch: 5 train: 4.036735 eval: 42.066840
matplot(cbind(overall_train_loss, overall_val_loss), type = "l", lty = 1, col = c("#2262AA", "#F82211"), xlab = "epoch", ylab = "Loss")