是否可以在 Keras 中拥有不可训练的层



我想计算像模糊或重采样这样的常量卷积,并希望它在训练过程中永远不会改变。

我可以将卷积核初始化为常量并将其从 Keras 的训练中排除吗?

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

您应该能够在创建图层后将trainable = False参数传递给图层定义,或设置layer.trainable = False属性。在后一种情况下,您需要在事后编译。请参阅此处的常见问题解答。

然后,您可以通过传递kernel_initializer = initializer参数来设置图层的常量权重。可在此处找到有关初始值设定项的详细信息。如果您已经在某处定义了权重矩阵,我认为您需要定义一个自定义初始值设定项,将权重设置为所需的值。该链接显示如何在底部定义自定义初始值设定项。假设您已经定义了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

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

相关内容

  • 没有找到相关文章

最新更新