Укажите некоторые необучаемые фильтры для сверточной сети Keras

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

Моя интуиция такова, что я могу создать два отдельных слоя Conv1D — один обучаемый и один необучаемый — а затем каким-то образом соединить их, но я не уверен, как это будет выглядеть в коде. Кроме того, для необучаемых фильтров, как мне предварительно указать веса?


person ccb    schedule 04.05.2018    source источник


Ответы (2)


Это довольно просто с функциональным API:

in = Input(....)
convA = Conv1D(filters1, kernel_size1, ...)
convB = Conv1D(filters2, kernel_size2, ...)

convB.trainable = False
convB.set_weights(some_weight_array)

conv1 = convA(in)
conv2 = convB(in)

convFinal = Concatenate(axis = -1)([conv1, conv2])

Я не пробовал код, но он должен работать после заполнения мелких деталей.

person Dr. Snoopy    schedule 04.05.2018

Все слои keras имеют метод set_weights (https://keras.io/layers/about-keras-layers/).

Вы можете заморозить слой Conv1D, используя trainable=False (https://keras.io/getting-started/faq/#how-can-i-freeze-keras-layers).

Объедините обучаемый Conv1D и необучаемый Conv1D с помощью слоя Concatenate (https://keras.io/layers/merge/).

person marcopah    schedule 04.05.2018