1

我想开发一个卷积网络架构,在第一层(在这种情况下为 Conv1D),我想预先指定一些不可训练的固定滤波器,同时还有几个模型可以学习的可训练滤波器。这可能吗?如何做到这一点?

我的直觉是我可以制作两个单独的 Conv1D 层——一个可训练的,一个不可训练的——然后以某种方式将它们连接起来,但我不确定这在代码中会是什么样子。另外,对于不可训练的过滤器,我如何预先指定权重?

4

2 回答 2

1

使用函数式 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])

我还没有尝试过代码,但在填写了一些小细节后它应该可以工作。

于 2018-05-04T19:24:31.690 回答
0

所有 keras 层都有一个set_weights方法(https://keras.io/layers/about-keras-layers/)。

Conv1D您可以使用trainable=Falsehttps://keras.io/getting-started/faq/#how-can-i-freeze-keras-layers )冻结图层的图层。

使用层 ( https://keras.io/layers/merge/ )连接可训练Conv1D和不可训练。Conv1DConcatenate

于 2018-05-04T16:17:32.590 回答