#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 и плотных слоев)