Keras: разделять веса между слоями с разными именами - PullRequest
2 голосов
/ 04 июня 2019

Стандартный рецепт кераса:

# This layer can take as input a matrix
# and will return a vector of size 64
shared_lstm = LSTM(64)

# When we reuse the same layer instance
# multiple times, the weights of the layer
# are also being reused
# (it is effectively *the same* layer)
encoded_a = shared_lstm(tweet_a)
encoded_b = shared_lstm(tweet_b)

предлагает нам создать слой, который является общим, то есть принимает разные тензоры в качестве входных и выходных данных, но одинаково работает с ними. Имя слоя будет выглядеть примерно так: 'lstm_1'.

Есть ли способ создать два разных (сверточных) слоя с разными именами, но с общим весом ядра и смещения?

Обновление

Позвольте мне уточнить цель. У меня есть модель обнаружения объекта (Single Shot Detector) с пирамидой карт характеристик. Эти карты функций располагаются друг на друге, как:

det_ctx1 (32x32, Conv+ReLU+MaxPool) -> det_ctx2 (16x16, Conv+ReLU+MaxPool) -> ...

Прогнозы обнаружения технически реализованы как слои свертки, производящие смещения и доверительные отношения классов из этих карт характеристик:

det_ctx1 -> det_ctx1_conf
         -> det_ctx1_loc

   |
   \/
det_ctx2 -> det_ctx2_conf
         -> det_ctx2_loc

   |
   \/
det_ctx3 -> det_ctx3_conf
         -> det_ctx3_loc

det_ctx1_conf и det_ctx2_conf семантически одинаковы, и я хотел бы использовать распределение веса для лучшего обучения этих слоев (в обычных условиях тренировочные образцы назначаются определенному уровню пирамиды, поэтому на некоторых уровнях тренировка слишком мала) образцы).

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