Keras:Lambda函数中Conv2D层中的消失参数

时间:2017-07-06 17:10:48

标签: python-2.7 lambda keras conv-neural-network

我正在定义一个Lambda图层,其中包含使用Conv2D图层的函数。

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级分类器。如何确保Conv2D图层的Lambda参数显示并且也可以训练?我还尝试在trainable=True函数中使用Lambda

def lambda_func(x,k):
    y = Conv2D(k, (3,3), padding='same', trainable=True)(x)
    return y

但这没有任何区别。

1 个答案:

答案 0 :(得分:3)

Lambda图层没有参数。

摘要中的参数是可以学习"的变量。 Lambda图层永远不会学习,它们是由您创建的功能。

如果您打算使用"卷积层",请在lambda图层之外使用它。
现在,如果你想使用"卷积运算",那么在lambda层中使用它,但是没有可学习的参数,你自己定义过滤器。

如果要创建以不同方式学习的特殊图层,请创建自定义图层。