Почему нумерация слоев меняется на противоположную при построении модели CNN с помощью keras и как я могу восстановить правильную нумерацию?

#r #tensorflow #keras #deep-learning #conv-neural-network

Вопрос:

Когда я строю модель CNN, порядок слоев правильный, но нумерация слоев обратная : нумерация уменьшается — когда она должна увеличиваться — при чтении модели сверху вниз. Вполне вероятно, что я совершил плохую манипуляцию, потому что раньше нумерация была правильной.

Заранее благодарю вас за помощь в правильном восстановлении нумерации!

Чтобы проиллюстрировать проблему, пожалуйста, найдите ниже небольшой репрекс :

 library(keras)

model <- keras_model_sequential() %>% 
  layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = "relu",
                input_shape = c(150, 150, 3)) %>% 
  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
  layer_conv_2d(filters = 64, kernel_size = c(3, 3), activation = "relu") %>% 
  layer_max_pooling_2d(pool_size = c(2, 2)) %>% 
  layer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = "relu") %>% 
  layer_max_pooling_2d(pool_size = c(2, 2)) %>%
  layer_conv_2d(filters = 128, kernel_size = c(3, 3), activation = "relu") %>% 
  layer_max_pooling_2d(pool_size = c(2, 2)) %>%
  layer_flatten() %>% 
  layer_dense(units = 512, activation = "relu") %>% 
  layer_dense(units = 1, activation = "sigmoid")

model
#> Model
#> Model: "sequential"
#> ________________________________________________________________________________
#> Layer (type)                        Output Shape                    Param #     
#> ================================================================================
#> conv2d_3 (Conv2D)                   (None, 148, 148, 32)            896         
#> ________________________________________________________________________________
#> max_pooling2d_3 (MaxPooling2D)      (None, 74, 74, 32)              0           
#> ________________________________________________________________________________
#> conv2d_2 (Conv2D)                   (None, 72, 72, 64)              18496       
#> ________________________________________________________________________________
#> max_pooling2d_2 (MaxPooling2D)      (None, 36, 36, 64)              0           
#> ________________________________________________________________________________
#> conv2d_1 (Conv2D)                   (None, 34, 34, 128)             73856       
#> ________________________________________________________________________________
#> max_pooling2d_1 (MaxPooling2D)      (None, 17, 17, 128)             0           
#> ________________________________________________________________________________
#> conv2d (Conv2D)                     (None, 15, 15, 128)             147584      
#> ________________________________________________________________________________
#> max_pooling2d (MaxPooling2D)        (None, 7, 7, 128)               0           
#> ________________________________________________________________________________
#> flatten (Flatten)                   (None, 6272)                    0           
#> ________________________________________________________________________________
#> dense_1 (Dense)                     (None, 512)                     3211776     
#> ________________________________________________________________________________
#> dense (Dense)                       (None, 1)                       513         
#> ================================================================================
#> Total params: 3,453,121
#> Trainable params: 3,453,121
#> Non-trainable params: 0
#> ________________________________________________________________________________
 

Создано 2021-06-03 пакетом reprex (v2.0.0)

Комментарии:

1. что вы подразумеваете под нумерацией?

2. Что вы имеете в виду под уменьшением, вы имеете в виду свой сверточный слой?

3. Под нумерацией я подразумеваю, что слои № 3, которые озаглавлены «conv2d_3″ и max_pooling2d3», Находятся перед слоями №2, которые озаглавлены «conv2d_2″ и max_pooling2d2» и так далее при чтении модели сверху вниз. Это не логично. Должно быть, я сделал что — то не так, и я хотел бы восстановить логический порядок-т. Е. Слои № 1 перед слоями № 2 и так далее.

4. Тот же комментарий, что и выше, для того, что я подразумеваю под «уменьшением», т. Е. conv2d_3 находится перед conv2d2, который находится перед conv2d_1 при чтении модели сверху вниз (idem для max_pooling и плотных слоев)