Реализация лямбда-слоя в модели Keras - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь реализовать внешнюю лямбда-функцию из модели Keras. Но функция вызывается дважды, или '### x' и '### x_reshape' печатаются дважды. Как это устранить?

def RA_reshape(x):
    print('\n### x ', x)
    x_reshape = K.reshape(x, [1, x.shape[1].value, x.shape[2].value, x.shape[3].value])
    print('\n### x_reshape ', x_reshape)
    return x_reshape

def unet(pretrained_weights = None,input_size = None):
    inputs = Input(input_size)

    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)

    RA_0 = Lambda(lambda y: RA_reshape(x=y) )
    conv1 = RA_0(conv1)

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Это Keras, работающий внутри и создающая «график», он дважды вызывает функции, и мы ничего не можем сделать.

Обратите внимание, что, поскольку это график, он не будет печатать значения, как вы. хотеть! Он будет печатать только символические c тензоры.

Для печати данных вам нужно создать небольшую модель только для прогнозирования данных, которые вы хотите увидеть. Или вам нужно включить режим нетерпения и не использовать «прогнозирование», а вручную go вызывать каждый слой с тензором.

0 голосов
/ 20 февраля 2020

Не могли бы вы попытаться назвать это так:

def unet(pretrained_weights = None,input_size = None):
    inputs = Input(input_size)

    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)

    RA_0 = Lambda(RA_reshape)(conv1)

Скажите, если это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...