我拥有的代码(我无法更改)将Resnet与my_input_tensor用作input_tensor。

model1 = keras.applications.resnet50.ResNet50(input_tensor=my_input_tensor, weights='imagenet')

研究source code时,ResNet50函数使用my_input_tensor创建一个新的keras输入层,然后创建模型的其余部分。这是我要用自己的模型复制的行为。我从h5文件加载我的模型。
model2 = keras.models.load_model('my_model.h5')

由于此模型已经具有输入层,因此我想用my_input_tensor定义的新输入层替换它。

如何替换输入层?

最佳答案

使用以下方法保存模型时:

old_model.save('my_model.h5')

它将保存以下内容:
  • 模型的体系结构,允许创建模型。
  • 模型的权重。
  • 模型的训练配置(损失,优化器)。
  • 优化器的状态,允许训练从您之前离开的位置恢复。

  • 因此,当您加载模型时:
    res50_model = load_model('my_model.h5')
    

    您应该返回相同的模型,可以使用以下命令验证相同的模型:
    res50_model.summary()
    res50_model.get_weights()
    

    现在,您可以弹出输入层,并使用以下命令添加自己的输入层:
    res50_model.layers.pop(0)
    res50_model.summary()
    

    添加新的输入层:
    newInput = Input(batch_shape=(0,299,299,3))    # let us say this new InputLayer
    newOutputs = res50_model(newInput)
    newModel = Model(newInput, newOutputs)
    
    newModel.summary()
    res50_model.summary()
    

    关于python - Keras替换输入层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49546922/

    10-12 21:13