将图层的一半滤镜设置为不可训练的keras/tensorflow

Kal*_*n M 9 python neural-network conv-neural-network keras tensorflow

我正在尝试训练研究论文建议的模型,其中我将卷积层的一半滤波器设置为Gabor滤波器,其余是默认初始化的随机权重.通常,如果我必须将图层设置为不可训练,我将trainable属性设置为False.但是在这里我只需要冻结一层过滤器的一半,我不知道该怎么做.任何帮助将非常感激.我正在使用带有Tensorflow后端的Keras.

den*_*s-w 3

如何制作两个获得相同输入和(几乎)相同参数的卷积层?因此,其中一层可以在初始化时使用随机权重进行训练,而另一层则不可使用 gabor 滤波器进行训练。

然后,您可以将两层的输出合并在一起,使其看起来像是一个卷积网络的输出。

下面是一个演示示例(需要使用Keras 功能 API):

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
Run Code Online (Sandbox Code Playgroud)