如何将 Lambda 层作为输入层添加到 Keras 中的现有模型?
How to add a Lambda layer as an input layer to an existing model in Keras?
我有一个任务要为 Keras 模型添加一个图像预处理层,所以在我加载了一个 Keras 模型之后,我想为这个模型添加一个新的输入层。
我发现我可以使用 Lambda
层来预处理图像数据。图层代码为:
def vgg16preprocessing(x):
mean_tensor = K.backend.variable([125.307, 122.95, 113.865], name="mean")
std_tensor = K.backend.constant([62.9932, 62.0887, 66.7048], name="std_tensor")
result = (x - mean_tensor) / (std_tensor)
return K.backend.reshape(result, (-1, 32, 32, 3))
preproc_layer = K.layers.Lambda(vgg16preprocessing, output_shape=(32, 32, 3), input_shape=(32, 32, 3))
但我不知道如何在我的模型前面添加这一层。我找到了 ,但我无法在 keras.layers.Input()
中添加图层。
有什么方法可以将Lambda
层设置为新的输入层吗?
您可以使用 VGG16 模型并将其应用于 Lambda
层的输出:
vgg = VGG16(...)
input_img = Input(shape=...)
preproc_img = Lambda(vgg16preprocessing)(input_img)
output = vgg(preproc_img)
model = Model(input_img, output)
我有一个任务要为 Keras 模型添加一个图像预处理层,所以在我加载了一个 Keras 模型之后,我想为这个模型添加一个新的输入层。
我发现我可以使用 Lambda
层来预处理图像数据。图层代码为:
def vgg16preprocessing(x):
mean_tensor = K.backend.variable([125.307, 122.95, 113.865], name="mean")
std_tensor = K.backend.constant([62.9932, 62.0887, 66.7048], name="std_tensor")
result = (x - mean_tensor) / (std_tensor)
return K.backend.reshape(result, (-1, 32, 32, 3))
preproc_layer = K.layers.Lambda(vgg16preprocessing, output_shape=(32, 32, 3), input_shape=(32, 32, 3))
但我不知道如何在我的模型前面添加这一层。我找到了 keras.layers.Input()
中添加图层。
有什么方法可以将Lambda
层设置为新的输入层吗?
您可以使用 VGG16 模型并将其应用于 Lambda
层的输出:
vgg = VGG16(...)
input_img = Input(shape=...)
preproc_img = Lambda(vgg16preprocessing)(input_img)
output = vgg(preproc_img)
model = Model(input_img, output)