我拥有的代码(我无法更改)使用Resnet和my_input_tensor
作为输入张量。
model1 = keras.applications.resnet50.ResNet50(input_tensor=my_input_tensor, weights='imagenet')
ResNet50函数研究source code,用my_input_tensor
创建一个新的keras输入层,然后创建模型的其余部分。这是我想用我自己的模型复制的行为。我从h5文件加载我的模型。
model2 = keras.models.load_model('my_model.h5')
由于这个模型已经有了一个输入层,我想用一个新的输入层替换它,这个输入层是用my_input_tensor
定义的。
如何替换输入层?
使用以下命令保存模型时:
它将保存以下内容:
因此,加载模型时:
您应该取回相同的模型,可以使用以下方法验证相同的模型:
现在,您可以弹出输入层并使用以下命令添加您自己的:
添加新输入层:
不幸的是,@MilindDeore的解决方案对我不起作用。虽然我可以打印新模型的摘要,但我在预测时收到一个“矩阵大小不兼容”的错误。我想这是有意义的,因为密集层的新输入形状与旧密集层权重的形状不匹配。
因此,这里有另一个解决方案。对我来说,关键是用“层”而不是“层”。后者似乎只返回一个副本。
层数。pop(0)或类似的东西不起作用。
您可以尝试两个选项:
1.
可以使用所需图层创建新模型。
一个相对简单的方法是i)提取模型json配置,ii)适当地更改它,iii)从中创建一个新模型,然后iv)复制权重。我只展示基本的想法。
i)提取配置
ii)更改配置
ii)创建新模型
ii)复制权重
2.
您可以尝试像kerassurgeon这样的库(我链接到一个使用tensorflow keras版本的fork)。请注意,插入和删除操作仅在某些条件下工作,例如兼容的尺寸。
相关问题 更多 >
编程相关推荐