【问题标题】:param show zero in model summary, when custom layer is used in making model当使用自定义层制作模型时,参数在模型摘要中显示为零
【发布时间】:2022-01-12 11:35:38
【问题描述】:

我正在尝试构建一个 InceptionNet。我建立了一个自定义的初始单元。不知何故,当我在模型中使用它时,模型摘要中的总参数显示为零。任何人都可以指导我在哪里犯了错误。

初始单元层代码

class InceptionUnit(keras.layers.Layer):
  def __init__(self, filters, activation='relu', **kwargs):
    super().__init__(**kwargs)
    self.filters = filters
    self.activation = keras.activations.get(activation)

  def call(self, inputs):
    out1 = keras.layers.Conv2D(filters=self.filters[0], kernel_size=1, 
                               padding='SAME')(inputs)
    out1 = self.activation(out1)
    out2 = keras.layers.Conv2D(filters=self.filters[1], kernel_size=1,
                               padding='SAME')(inputs)
    out2 = self.activation(out2)
    out2 = keras.layers.Conv2D(filters=self.filters[2], kernel_size=3,
                               padding='SAME')(out2)
    out2 = self.activation(out2)
    out3 = keras.layers.Conv2D(filters=self.filters[3], kernel_size=1,
                               padding='SAME')(inputs)
    out3 = self.activation(out3)
    out3 = keras.layers.Conv2D(filters=self.filters[4], kernel_size=5,
                               padding='SAME')(out3)
    out3 = self.activation(out3)
    out4 = keras.layers.MaxPooling2D(pool_size=(3, 3), strides=1,
                                     padding='SAME')(inputs)
    out4 = keras.layers.Conv2D(filters=self.filters[5], kernel_size=1,
                               padding='SAME')(out4)
    out4 = self.activation(out4)
    out = keras.layers.concatenate([out1, out2, out3, out4])
    return out

模型代码:

filters = [[64, 96, 128, 16, 32, 32],
           [128, 128, 192, 32, 96, 64],
           [192, 96, 208, 16, 48, 64],
           [160, 112, 224, 24, 64, 64],
           [128, 128, 256, 24, 64, 64],
           [112, 144, 288, 32, 64, 64],
           [256, 160, 320, 32, 128, 128],
           [256, 160, 320, 32, 128, 128],
           [384, 192, 384, 48, 128, 128]]

model = keras.models.Sequential()

model.add(keras.layers.InputLayer(input_shape=(224, 224, 3)))
model.add(keras.layers.Conv2D(filters=64, kernel_size=7, strides=2, 
                              padding='SAME', activation='relu'))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.MaxPool2D(pool_size=(3, 3), strides=2, padding='SAME'))
model.add(keras.layers.Conv2D(filters=64, kernel_size=1, activation='relu'))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.Conv2D(filters=192, kernel_size=3, strides=1, padding='SAME', 
                              activation='relu'))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.MaxPool2D(pool_size=(3, 3), strides=2, padding='SAME', ))
model.add(InceptionUnit(filters[0]))
model.add(InceptionUnit(filters[1]))
model.add(keras.layers.MaxPool2D(pool_size=(3, 3), strides=2, padding='SAME'))
model.add(InceptionUnit(filters[2]))
model.add(InceptionUnit(filters[3]))
model.add(InceptionUnit(filters[4]))
model.add(InceptionUnit(filters[5]))
model.add(InceptionUnit(filters[6]))
model.add(keras.layers.MaxPool2D(pool_size=(3, 3), strides=2, padding='SAME'))
model.add(InceptionUnit(filters[7]))
model.add(InceptionUnit(filters[8]))
model.add(keras.layers.GlobalAveragePooling2D())
model.add(keras.layers.Dropout(rate=0.4))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(units=1000, activation='softmax'))

这是 model.summary() 的输出

【问题讨论】:

    标签: deep-learning computer-vision tensorflow2.0


    【解决方案1】:

    找到了答案。 我在调用方法中创建图层。相反,我应该在 init 方法中制作它们,然后在调用方法中使用它们。

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多