我正在尝试从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)
您可以这样称呼它吗:
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)
告诉我,如果可行!
这是Keras在内部工作并构建“图形”,它确实调用了两次函数,我们无能为力。
请注意,由于它是图形,因此不会根据需要打印值!它只会打印符号张量。
对于打印数据,您只需要创建一个小模型即可预测要查看的数据。或者,您需要启用eager模式,而不要使用“预测”,而是手动使用张量调用每一层。