我需要在一个已有的模型中添加层。但是,我需要在“主模型级别”添加层,也就是说,我不能使用经典的函数方法。例如,如果我使用类似如下的方法:
from keras.layers import Dense,Reshape, Input
inp = Input(shape=(15,))
d1 = Dense(224*224*3, activation='linear')(inp)
r1 = Reshape(input_shape)
from keras import Model
model_mod = r1(d1)
model_mod = mobilenet(model_mod)
model_mod = Model(inp, model_mod)
本人获得:
Layer (type) Output Shape Param #
=================================================================
input_5 (InputLayer) (None, 15) 0
_________________________________________________________________
dense_4 (Dense) (None, 150528) 2408448
_________________________________________________________________
reshape_4 (Reshape) (None, 224, 224, 3) 0
_________________________________________________________________
mobilenet_1.00_224 (Model) (None, 1000) 4253864
因此,我得到了一个带有嵌套子模型的模型。相反,我将嵌套子模型的层(mobilenet)“添加”到新的顶层(即,在reforme_4之后)。我尝试了:
modelB_input = modelB.input
for layer in modelB.layers:
if layer == modelB_input:
continue
modelA.add(layer)
它适用于简单的顺序模型(例如,vgg,mobilenet),但对于连接不是严格顺序的更复杂模型(例如,inception,resnet),这段代码就不好了。有什么想法吗?
2条答案
按热度按时间7d7tgy0s1#
您可以使用
keras.layers.Concatenate
来合并两个模型,如下所示:(摘自:(第10页)
虽然此示例使用
keras.models.Sequential
,但它也适用于其他模型或层。您还可以查看:https://keras.io/api/layers/merging_layers/concatenate/
x9ybnkn62#
如果你想在已有模型的B层中添加一个A层,你可以把B层输出到A层,然后用
tf.keras.model.Model
解析到一个新的模型中。这个方法的全面演示在用于目标检测或分割的特征提取器中。你可以在这里找到一个例如,通过在VGG 16模型底部添加2个新层
当前图层:
然后我附加两个新图层:
我们把它们堆在最下面了!