如何在TensorFlow中堆叠两个模型以创建新的深度学习模型?
两种实现方案如下
方案1:直接堆叠单卷积层与model_1
对应第一种代码需求,无需单独将卷积层封装为模型,直接用Keras函数式API拼接即可,代码示例:
import tensorflow as tf from tensorflow.keras.layers import Input, Conv2D input_shape = (480, 800, 3) conv_layer = Conv2D(filters=3, kernel_size=5, strides=(1, 1), padding="same") # 实例化model_1,可根据需求调整weights、include_top等参数 model_1 = tf.keras.applications.MobileNetV3Small(input_shape=input_shape, weights=None, include_top=True) # 拼接生成model_2 inputs = Input(shape=input_shape) x = conv_layer(inputs) outputs = model_1(x) model_2 = tf.keras.Model(inputs=inputs, outputs=outputs)
方案2:堆叠两个已封装的独立模型
对应已单独构建了conv_model和model_1的场景,直接将两个模型作为层调用拼接即可,代码示例:
import tensorflow as tf from tensorflow.keras.layers import Input, Conv2D from tensorflow.keras.models import Sequential input_shape = (480, 800, 3) # 已定义的卷积小模型 conv_model = Sequential([ Input(shape=input_shape), Conv2D(filters=3, kernel_size=5, strides=(1, 1), padding="same") ]) # 已定义的MobileNetV3模型 model_1 = tf.keras.applications.MobileNetV3Small(input_shape=input_shape, weights=None, include_top=True) # 拼接生成model_2 inputs = Input(shape=input_shape) x = conv_model(inputs) outputs = model_1(x) model_2 = tf.keras.Model(inputs=inputs, outputs=outputs)
注意事项
- 若需要使用MobileNetV3的预训练权重,实例化model_1时添加参数
weights='imagenet'即可 - 若需要冻结model_1的预训练权重不参与训练,可添加代码
model_1.trainable = False - 完成拼接后可调用
model_2.summary()查看网络结构,确认输入输出尺寸符合预期
内容的提问来源于stack exchange,提问作者Swaroop
相关产品推荐
相关产品推荐

