【问题标题】:Specify some untrainable filters for Keras convolutional network为 Keras 卷积网络指定一些不可训练的过滤器
【发布时间】:2018-05-04 15:35:07
【问题描述】:

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

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

【问题讨论】:

    标签: python keras convolutional-neural-network


    【解决方案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])
    

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

    【讨论】:

      【解决方案2】:

      所有 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

      【讨论】:

        猜你喜欢
        • 2019-04-11
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-24
        • 2019-01-14
        • 1970-01-01
        相关资源
        最近更新 更多