python - 将模型内的Keras Model层变成多层
问题描述
我目前有一个使用包含 ResNet50 的功能 API 的架构,但是在使用附加层构建我的模型时,它将 ResNet 视为模型层,而不是一系列层。有没有什么方法可以把这个模型层变成一系列层,而不使用 Sequential API?我本质上想把模型中的这个模型变成一个模型。(不是简单地打印出层或任何东西)这是模型架构,显示带有 resnet50“层”的当前模型。
Layer (type) Output Shape Param # Connected to
==================================================================================================
main_input (InputLayer) (None, 224, 224, 3) 0
__________________________________________________________________________________________________
aux_input (InputLayer) (None, 224, 224, 1) 0
__________________________________________________________________________________________________
lambda_4 (Lambda) (None, 224, 224, 3) 0 main_input[0][0]
aux_input[0][0]
__________________________________________________________________________________________________
resnet50 (Model) (None, 2) 23591810 lambda_4[0][0]
==================================================================================================
解决方案
你可以有点欺骗这个,是的。但是其他评论/答案并不是在开玩笑,它有很多值得一看的地方,尤其是因为它是线性打印出来的,而以这种方式可视化数据流并不容易。以下是一些可能对您有所帮助的细节。
- 您可以从 model.layers 中获取图层,其中将包括您添加到其中的任何内容。
- 您可以参考这些图层,例如
layer_001 = model.layers[0]
.- 如果您想将它们保留在现有模型管道中,您可以在模型中更改它们的属性(例如添加正则化
model.layers[-7].bias_regularizer=l2(0.001)
:) - 如果您像示例一样明确引用它们
layer_001
,则需要在拟合之前重建并重新编译新模型管道。
- 如果您想将它们保留在现有模型管道中,您可以在模型中更改它们的属性(例如添加正则化
如果你能想出一种巧妙的循环方式来对所有层执行此操作,那可能很好,但否则以这种方式重新创建整个事物将需要大量工作。我同意其他评论/答案,并在Papers with Code的帮助下从头开始重新创建它。
如果您只想修改几层上的几个属性,我只需在模型中引用它们(如上)并重新编译。
推荐阅读
- github - 邀请某人在 github 中使用管理员权限进行协作
- c++ - 链表只在调试中删除,在构建中不删除
- javascript - 我们如何制作一个带有滚动条的 div 元素,使其垂直滚动条顶部位置为 100px?
- javascript - 限制multiple-file-input-field中上传的文件数量
- android - 使用 Android 模拟器反应本机应用程序崩溃而没有错误
- node.js - AWS Fargate:节点 js 内存泄漏
- flopy - Flopy 生成的 shapefile 不考虑 MODFLOW DIS lenuni 值?
- swift - AVAudioPlayer 使用命令中心暂停后继续“播放”
- python - 我想到处隐藏光标移动
- html - 如何在 CSS 中使用偏移量来实现双边框?