在Keras模型中实现lambda层

问题描述 投票:0回答:2

我正在尝试从Keras模型实现外部lambda函数。但是该函数被调用两次,或者'### 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)
python tensorflow keras
2个回答
0
投票

您可以这样称呼它吗:

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)

告诉我,如果可行!


0
投票

这是Keras在内部工作并构建“图形”,它确实调用了两次函数,我们无能为力。

请注意,由于它是图形,因此不会根据需要打印值!它只会打印符号张量。

对于打印数据,您只需要创建一个小模型即可预测要查看的数据。或者,您需要启用eager模式,而不要使用“预测”,而是手动使用张量调用每一层。

© www.soinside.com 2019 - 2024. All rights reserved.