Превращение слоя модели Keras в модели в несколько слоев - PullRequest
0 голосов
/ 05 июня 2019

В настоящее время у меня есть архитектура, использующая функциональный API, который включает ResNet50, но при построении моей модели с дополнительными слоями она рассматривает ResNet как слой модели, а не как ряд слоев. Есть ли способ превратить этот слой модели в серию слоев без использования последовательного API? По сути, я хочу превратить эту модель в модель просто в модель. (Не просто распечатывать слои или что-то еще) Это архитектура модели, показывающая текущую модель с «слоем» resnet50.

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
main_input (InputLayer)         (None, 224, 224, 3)  0                                            
__________________________________________________________________________________________________
aux_input (InputLayer)          (None, 224, 224, 1)  0                                            
__________________________________________________________________________________________________
lambda_4 (Lambda)               (None, 224, 224, 3)  0           main_input[0][0]                 
                                                                 aux_input[0][0]                  
__________________________________________________________________________________________________
resnet50 (Model)                (None, 2)            23591810    lambda_4[0][0]                   
==================================================================================================

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Вы можете обмануть это, да.Но другие комментарии / ответы не шутят, на них много нужно смотреть, тем более что они распечатываются линейно, тогда как таким образом поток данных визуализировать нелегко.Вот некоторые подробности, которые могут вам помочь.

  • Вы можете получить слои из model.layers, которые будут включать все, что вы добавили в него.
  • Вы можете ссылаться на эти слои, например layer_001 = model.layers[0].
    • если вы хотите сохранить их в существующем конвейере модели, вы можете изменить их атрибуты в модели (например, добавив регуляризацию: model.layers[-7].bias_regularizer=l2(0.001))
    • , если вы явно ссылаетесь на них, какпример layer_001, вам нужно перестроить и перекомпилировать новый модельный конвейер перед установкой.

Если вы можете придумать аккуратный, петлевой способ сделать это для всех слоев,это может быть хорошо, но в противном случае будет много работы, чтобы воссоздать все это таким образом.Я согласен с другими комментариями / ответами и просто воссоздаю его с нуля с помощью Документов с кодом .

Если вы просто хотите изменить пару атрибутов на нескольких слоях, япросто сослаться на них внутри модели (как указано выше) и перекомпилировать.

0 голосов
/ 06 июня 2019

Это скорее обходной путь, чем верный ответ, но мое решение в этом случае состояло в том, чтобы полностью перестроить архитектуру resnet50 с использованием функционального API, с добавлением необходимых слоев. См. этот пример. При использовании этого подхода нет «модельного» вложенного слоя.

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