首页 > 解决方案 > 将模型内的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]                   
==================================================================================================

标签: pythontensorflowkeras

解决方案


你可以有点欺骗这个,是的。但是其他评论/答案并不是在开玩笑,它有很多值得一看的地方,尤其是因为它是线性打印出来的,而以这种方式可视化数据流并不容易。以下是一些可能对您有所帮助的细节。

  • 您可以从 model.layers 中获取图层,其中将包括您添加到其中的任何内容。
  • 您可以参考这些图层,例如layer_001 = model.layers[0].
    • 如果您想将它们保留在现有模型管道中,您可以在模型中更改它们的属性(例如添加正则化model.layers[-7].bias_regularizer=l2(0.001):)
    • 如果您像示例一样明确引用它们layer_001,则需要在拟合之前重建并重新编译新模型管道。

如果你能想出一种巧妙的循环方式来对所有层执行此操作,那可能很好,但否则以这种方式重新创建整个事物将需要大量工作。我同意其他评论/答案,并在Papers with Code的帮助下从头开始重新创建它。

如果您只想修改几层上的几个属性,我只需在模型中引用它们(如上)并重新编译。


推荐阅读