You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义Keras层构建模型时model.summary()显示参数为0如何解决?

问题原因

Keras自定义层的可训练参数和子模块必须在__init__方法中绑定为实例属性,才会被框架自动识别追踪。你将Inception单元内的所有Conv2D层都定义在了call方法中,这些层属于每次前向传播时临时创建的对象,不会被注册到自定义层的参数列表中,因此model.summary()会显示该层参数为0。

修复方案

将Inception单元内用到的所有卷积层、池化层都迁移到__init__方法中初始化并绑定为实例属性,在call方法中直接调用这些预先创建好的层即可。修改后的代码如下:

class InceptionUnit(keras.layers.Layer):
  def __init__(self, filters, activation='relu', **kwargs):
    super().__init__(**kwargs)
    self.filters = filters
    self.activation = keras.activations.get(activation)
    # 分支1的卷积层
    self.conv1_1 = keras.layers.Conv2D(filters=self.filters[0], kernel_size=1, padding='SAME')
    # 分支2的卷积层
    self.conv2_1 = keras.layers.Conv2D(filters=self.filters[1], kernel_size=1, padding='SAME')
    self.conv2_2 = keras.layers.Conv2D(filters=self.filters[2], kernel_size=3, padding='SAME')
    # 分支3的卷积层
    self.conv3_1 = keras.layers.Conv2D(filters=self.filters[3], kernel_size=1, padding='SAME')
    self.conv3_2 = keras.layers.Conv2D(filters=self.filters[4], kernel_size=5, padding='SAME')
    # 分支4的池化和卷积层
    self.pool4_1 = keras.layers.MaxPooling2D(pool_size=(3, 3), strides=1, padding='SAME')
    self.conv4_1 = keras.layers.Conv2D(filters=self.filters[5], kernel_size=1, padding='SAME')

  def call(self, inputs):
    out1 = self.conv1_1(inputs)
    out1 = self.activation(out1)
    
    out2 = self.conv2_1(inputs)
    out2 = self.activation(out2)
    out2 = self.conv2_2(out2)
    out2 = self.activation(out2)
    
    out3 = self.conv3_1(inputs)
    out3 = self.activation(out3)
    out3 = self.conv3_2(out3)
    out3 = self.activation(out3)
    
    out4 = self.pool4_1(inputs)
    out4 = self.conv4_1(out4)
    out4 = self.activation(out4)
    
    out = keras.layers.concatenate([out1, out2, out3, out4])
    return out

修改完成后重新构建模型,再次调用model.summary()即可正常显示每个InceptionUnit层的参数。

内容的提问来源于stack exchange,提问作者user13689232

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:24:01