tensorflow - 如何在预训练的 MobileNetV3 模型之上添加额外的层?
问题描述
我有一个模型,它使用预训练的 MobileNetV3Large 模型并连接类似的 U-net 架构。那不是问题。但我想用这个model2添加model1。在模型 2 中,我只有批量标准化和丢失,我想在模型 2 的顶部添加它们。我尝试了很多东西,但它不能正常工作。任何的想法?!
模型 2
inputs = Input((256,256,3))
# MobileNetV3
mobilenet = MobileNetV3Large(include_top=False, weights="imagenet", input_tensor=inputs)
mobilenet.layers[89]._name = "relu_3"
mobilenet.layers[196]._name = "relu_4"
l4 = mobilenet.get_layer("relu_3").output
b_layer = mobilenet.get_layer("relu_4").output
up = Conv2DTranspose(256, (2, 2), strides=2, padding="same")(b_layer)
up = Concatenate()([up, l4])
conv = Conv2D(256, (3, 3), activation='relu', padding="same")(up)
conv = Conv2D(256, (3, 3), activation='relu', padding="same")(conv)
#output
outputs = Conv2D(1, 1, padding="same", activation="sigmoid")(conv)
model2 = Model(inputs , outputs)
model2.summary()
模型 1
inputs = Input((256,256,3))
x = Sequential()
x = inputs
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
outputs1 = x
model1 = Model(inputs , outputs1)
model1.summary()
解决方案
您可以按功能堆叠模型:
model2 = Model(inputs)
model1 = Model(model2)
model3 = Model(inputs, model1)
您可以按顺序堆叠模型:
model3 = Sequential()
for layer in model2.layers:
model3.add(layer)
for layer in model1.layers:
model3.add(layer)
推荐阅读
- python - Nginx : 子域配置文件
- python - 试图创建一个熊猫的df词包
- loops - 为什么 sp_send_dbmail 不断发送电子邮件?
- laravel-5 - Laravel htmlentities() 期望参数 1 是字符串,转换为字符串后给出的数组
- c# - EF如何将连接字符串传递给不同的项目
- javascript - 将 CSV 从 JavaScript 发送到 Firebase Cloud Storage
- wpf - WPF - ItemsControl 中的 UniformGrid 显示表头
- scala - EsHadoopException:无法写入批量操作 Spark Streaming 的所有条目
- ios - 在 UITableView 标题上看不到按钮
- php - 如何在父类的函数中调用子类的函数