Как построить 2-ые сверточные слои, чтобы обнаружить образцы для глубокого изучения классификации в изображениях, подобных «QR-коду»? - PullRequest
0 голосов
/ 10 июля 2019

Я хотел бы классифицировать изображения (или, точнее, тепловую карту), используя Tensorflow / keras в R.

Я начал с чтения учебников, но в моем случае я не хочу классифицировать "большие" шаблоныкак например кошка или дом или 9 - но скорее изменяющиеся образцы в тепловой карте.

Пример:

enter image description here

Myтекущий код для слоев:

 model <- keras_model_sequential() 
  model %>%
    #layer_dropout(rate = FLAGS$dropout1) %>%
    layer_conv_2d(filters = FLAGS$convol_filters1, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu", padding = "same"
                  ) %>%
    layer_conv_2d(filters = FLAGS$convol_filters1, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu"
                  #, padding = "same"
    ) %>%
    layer_max_pooling_2d(pool_size = c(2,2)) %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
    layer_conv_2d(filters = FLAGS$convol_filters2, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu", padding = "same"
    ) %>%
    layer_conv_2d(filters = FLAGS$convol_filters2, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu"
                  #, padding = "same"
    ) %>%
    layer_max_pooling_2d(pool_size = c(2,2)) %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
      layer_conv_2d(filters = FLAGS$convol_filters3, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu", padding = "same"
    ) %>%
    layer_conv_2d(filters = FLAGS$convol_filters3, kernel_size = c(3,3), 
                  input_shape = c(dim(data.training)[2], dim(data.training)[2], 1), data_format = "channels_last"
                  , activation = "relu"
                  #, padding = "same"
    ) %>%
    layer_max_pooling_2d(pool_size = c(2,2)) %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
    layer_flatten() %>%
    layer_dense(units = FLAGS$dense_units1
    ) %>%   
    layer_activation_relu() %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
    layer_dense(units = FLAGS$dense_units1) %>%   
    layer_activation_relu() %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
    layer_dense(units = FLAGS$dense_units1) %>%   
    layer_activation_relu() %>%
    layer_dropout(rate = FLAGS$dropout1) %>%
    layer_dense(units = 2, activation = 'softmax')

Это не приводит к большому успеху в обучении, так как после нескольких (дюжин) эпох точность обучения в основном равна 1, но val_loss skyrockets и val_accuracy снижаются.

Я думаю, что модель должна уметь делать то, что я хочу, но я могу пойти по этому пути неправильно.Любые указатели, что я мог бы фундаментально изменить, и тогда я могу сделать настройку гиперпараметра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...