【问题标题】:Is it possible to have non-trainable layer in Keras?Keras 中是否可以有不可训练的层?
【发布时间】:2017-12-20 18:04:09
【问题描述】:

我想计算像模糊或重采样这样的恒定卷积,并希望它在训练期间永远不会改变。

我可以将卷积核初始化为常数,并在 Keras 中将其排除在训练之外吗?

更具体地说,我不想将其用于文档中声明的目的。我想以这种方式实现残差网络:一个分支执行正常的可训练卷积,而并行分支执行一些恒定的操作,例如平均。

【问题讨论】:

    标签: python machine-learning keras conv-neural-network deep-residual-networks


    【解决方案1】:

    您应该能够将trainable = False 参数传递给您的层定义,或者在创建层后设置layer.trainable = False 属性。在后一种情况下,您需要事后编译。请参阅FAQ here

    然后您可以通过传递kernel_initializer = initializer argument 为层设置恒定权重。有关初始化程序 can be found here 的更多信息。如果您已经在某处定义了权重矩阵,我认为您将需要定义一个自定义初始化程序,将权重设置为您想要的值。该链接显示了如何在底部定义自定义初始化程序。假设您定义了my_constant_weight_matrix,那么像以下这样简单的方法可能会起作用:

    def my_init(shape, dtype=None):
        # Note it must take arguments 'shape' and 'dtype'.
        return my_constant_weight_matrix
    model.add(Conv2D(..., kernel_initializer=my_init))  # replace '...' with your args
    

    也就是说,我还没有验证,当我进行谷歌搜索时,我看到很多关于层冻结无法正常工作的错误报告弹出。不过值得一试。

    【讨论】:

    • 设置不可训练层后,如何设置卷积权重?
    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2017-11-22
    • 2019-02-28
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多