Установите половину фильтров слоя как не обучаемые керасы / тензор потока - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь обучить модель, предложенную этой исследовательской работой, в которой я установил половину фильтров слоя свертки на фильтры Габора, а остальные - случайные веса, которые инициализируются по умолчанию.Обычно, если мне нужно установить слой как не обучаемый, я устанавливаю атрибут trainable как False.Но здесь я должен заморозить только половину фильтров слоя, и я не знаю, как это сделать.Любая помощь могла бы быть полезна.Я использую Keras с бэкэндом Tensorflow.

1 Ответ

0 голосов
/ 20 сентября 2018

Как насчет создания двух сверточных слоев, которые получают одинаковый вход и (почти) одинаковые параметры?Таким образом, один из них является обучаемым произвольным весом при инициализации, а другой слой не обучаем с помощью фильтров Габора.

Затем можно объединить выходные данные двух слоев таким образом, чтобы это выглядело как выходнойиз одной сверточной сети.

Вот пример для демонстрации (необходимо использовать Функциональный API Keras ):

n_filters = 32

my_input = Input(shape=...)
conv_freezed = Conv2D(n_filters/2, (3,3), ...)
conv_trainable = Conv2D(n_filters/2, (3,3), ...)

conv_freezed_out = conv_freezed(my_input)
conv_trainable_out = conv_trainable(my_input)
conv_out = concatenate([conv_freezed_out, conv_trainable_out])

# set weights and freeze the layer
conv_freezed.set_weights(...)
conv_freezed.trainable = False
...