Keras: параметры исчезновения в слое Conv2D в функции лямбда

Я определяю 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(), лямбда-слой не показывает параметров!

_________________________________________________________________
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         
_________________________________________________________________

(E сть 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 ответ

Решение

Лямбда-слои не имеют параметров.

Параметры, в резюме, являются переменными, которые могут "учиться". Лямбда-слои никогда не учатся, это функции, созданные вами.

Если вы намерены использовать "Сверточный слой", используйте его за пределами лямбда-слоя.
Теперь, если вы хотите использовать "операцию свертки", а затем использовать ее внутри лямбда-слоя, но нет обучаемого параметра, вы сами определяете фильтры.

Если вы хотите создать специальный слой, который обучается по-другому, то создайте пользовательский слой.

Другие вопросы по тегам