Стандартный рецепт кераса:
# 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
семантически одинаковы, и я хотел бы использовать распределение веса для лучшего обучения этих слоев (в обычных условиях тренировочные образцы назначаются определенному уровню пирамиды, поэтому на некоторых уровнях тренировка слишком мала) образцы).