为 Keras 卷积网络指定一些不可训练的过滤器
Specify some untrainable filters for Keras convolutional network
我想开发一个卷积网络架构,在第一层(在本例中为 Conv1D),我想预先指定一些不可训练的固定过滤器,同时还有几个模型可以学习的可训练过滤器。这可能吗?如何实现?
我的直觉是我可以制作两个单独的 Conv1D 层 - 一个可训练层和一个不可训练层 - 然后以某种方式将它们连接起来,但我不确定这在代码中会是什么样子。另外,对于无法训练的过滤器,我该如何预先指定权重?
所有 keras 层都有一个 set_weights
方法 (https://keras.io/layers/about-keras-layers/)。
您可以使用 trainable=False
(https://keras.io/getting-started/faq/#how-can-i-freeze-keras-layers) 冻结 Conv1D
图层的图层。
使用 Concatenate
层 (https://keras.io/layers/merge/) 连接可训练的 Conv1D
和不可训练的 Conv1D
。
使用函数 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])
我还没有尝试过代码,但在填写小细节后它应该可以工作。
我想开发一个卷积网络架构,在第一层(在本例中为 Conv1D),我想预先指定一些不可训练的固定过滤器,同时还有几个模型可以学习的可训练过滤器。这可能吗?如何实现?
我的直觉是我可以制作两个单独的 Conv1D 层 - 一个可训练层和一个不可训练层 - 然后以某种方式将它们连接起来,但我不确定这在代码中会是什么样子。另外,对于无法训练的过滤器,我该如何预先指定权重?
所有 keras 层都有一个 set_weights
方法 (https://keras.io/layers/about-keras-layers/)。
您可以使用 trainable=False
(https://keras.io/getting-started/faq/#how-can-i-freeze-keras-layers) 冻结 Conv1D
图层的图层。
使用 Concatenate
层 (https://keras.io/layers/merge/) 连接可训练的 Conv1D
和不可训练的 Conv1D
。
使用函数 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])
我还没有尝试过代码,但在填写小细节后它应该可以工作。