首页 > 解决方案 > 如何堆叠两个模型以在 TensorFlow 中创建新模型?

问题描述

我正在准备两个模型(一个是另一个的子集)。

input_shape = (480, 800, 3)
conv_layer = Conv2D(filters=3, kernel_size=5, strides=(1, 1), padding="same")

# The outputs of the conv layer match the inputs of model_1
model_1 = tf.keras.applications.MobileNetV3Small(input_shape)
model_2 = conv_layer + model_1  # I need help with this line

我想创建一个model_2这样的,它有一个额外的 Conv2D 层。的参数conv_layer确保输入大小与其输出相同。因此,应该可以堆叠conv_layermodel_1生成model_2.

我正在考虑创建一个只有 的模型conv_layer,例如:

conv_model = Sequential([
               Input(shape=input_shape),
               Conv2D(filters=3, kernel_size=5, strides=(1, 1), padding="same")
             ])

在这种情况下,我将不得不堆叠两个模型conv_modelmodel_1创建model_2.

我不知道如何做这两者中的任何一个,以实现我所需要的。

编辑:修复了填充conv_layer以确保输入大小相同。

标签: pythontensorflow

解决方案


您可以简单地添加model_1Sequential. 另请注意,conv 层的输出与 model_1 的输入匹配 - 您需要为此使用padding="same"

import tensorflow as tf
import numpy as np

input_shape = (480, 800, 3)
conv_layer = tf.keras.layers.Conv2D(filters=3, kernel_size=5, strides=(1, 1), padding="same")
model_1 = tf.keras.applications.MobileNetV3Small(input_shape)
model_2 = tf.keras.Sequential([
    tf.keras.layers.InputLayer(input_shape=input_shape),
    conv_layer,
    model_1
])
# let's test that everything works on random data
model_2.predict(np.random.random((1, 480, 800, 3)))

推荐阅读