我正在使用使用Conv2D
层的函数定义一个Lambda
层。
def lambda_func(x,k):
y = Conv2D(k, (3,3), padding='same')(x)
return y
并调用它使用
k = 64
x = Conv2D(k, (3,3), data_format='channels_last', padding='same', name='block1_conv1')(inputs)
y = Lambda(lambda_func, arguments={'k':k}, name = 'block1_conv1_loc')(x)
但是在model.summary()
,lambda层没有显示任何参数!
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 224, 224, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
_________________________________________________________________
block1_conv1_loc (Lambda) (None, 224, 224, 64) 0
_________________________________________________________________
activation_1 (Activation) (None, 224, 224, 64) 0
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
_________________________________________________________________
flatten (Flatten) (None, 802816) 0
_________________________________________________________________
(它下面有一个Dense
层,下面是一个Softmax
2 类分类器)。如何确保Lambda
层的Conv2D
参数显示并可训练?我还尝试在Lambda
函数中使用trainable=True
。
def lambda_func(x,k):
y = Conv2D(k, (3,3), padding='same', trainable=True)(x)
return y
但这没有任何区别。
Lambda 层没有参数。
摘要中的参数是可以"学习"的变量。Lambda 层永远不会学习,它们是您创建的函数。
如果您确实打算使用"卷积层",请在 lambda 层之外使用它。
现在,如果你想使用"卷积操作",那么在lambda层中使用它,但没有可学习的参数,你自己定义过滤器。
如果要创建以不同方式学习的特殊层,请创建自定义层。