是否可以在 Keras 中使用不可训练层?
Is it possible to have non-trainable layer in Keras?
我想计算恒定的卷积,如模糊或重采样,并希望它在训练期间永远不会改变。
我可以将卷积核初始化为常量并将其从 Keras 的训练中排除吗?
更具体地说,我不想将其用于文档中声明的目的。我想以这种方式实现残差网络:一个分支做正常的可训练卷积,而并行分支做一些恒定的事情,比如平均。
您应该能够将 trainable = False
参数传递给图层定义,或者在创建图层后设置 layer.trainable = False
属性。在后一种情况下,您需要事后编译。见 FAQ here.
然后您可以通过传递 kernel_initializer = initializer
argument. More information on initializers can be found here 为层设置常量权重。如果你已经在某处定义了一个权重矩阵,我认为你需要定义一个自定义初始化程序来将权重设置为你想要的值。 link 显示了如何在底部定义自定义初始化程序。假设您定义了 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
就是说,我还没有验证,当我进行 Google 搜索时,我看到弹出了很多关于图层冻结无法正常工作的错误报告。不过值得一试。
我想计算恒定的卷积,如模糊或重采样,并希望它在训练期间永远不会改变。
我可以将卷积核初始化为常量并将其从 Keras 的训练中排除吗?
更具体地说,我不想将其用于文档中声明的目的。我想以这种方式实现残差网络:一个分支做正常的可训练卷积,而并行分支做一些恒定的事情,比如平均。
您应该能够将 trainable = False
参数传递给图层定义,或者在创建图层后设置 layer.trainable = False
属性。在后一种情况下,您需要事后编译。见 FAQ here.
然后您可以通过传递 kernel_initializer = initializer
argument. More information on initializers can be found here 为层设置常量权重。如果你已经在某处定义了一个权重矩阵,我认为你需要定义一个自定义初始化程序来将权重设置为你想要的值。 link 显示了如何在底部定义自定义初始化程序。假设您定义了 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
就是说,我还没有验证,当我进行 Google 搜索时,我看到弹出了很多关于图层冻结无法正常工作的错误报告。不过值得一试。