Seite 1 von 1

Param# Spalte von model.summary() bei Conv2D layer den Wert 0

Verfasst: Freitag 17. Juni 2022, 16:53
von nichtSoGuter
ich habe folgenden Custom layer erstellt (siehe Codeblock 1) und anschließend im im Codeblock 2 verwendet. Das Problem ist, dass bei der Param# Spalte der .summary() methode die Anzahl der Parameter bei meinem Custom Layer wohl 0 ist. Ich finde meinen Fehler jedoch leider nicht,

Codeblock 1: (Mein Custom Layer wird erstellt)

Code: Alles auswählen

class ResidualUnit(keras.layers.Layer):
  def __init__(self, filters, strides=1, activation = "relu", **kwargs):
    super().__init__(**kwargs)
    self.activation = keras.activations.get(activation)
    self.main_layers= [
                       Conv2D(filters = filters, kernel_size = 3,
                                           strides = strides, padding = "SAME", 
                                           use_bias = False),
                       
                       BatchNormalization(),
                       self.activation,

                       Conv2D(filters = filters, kernel_size = 3,
                                           strides = strides, padding = "SAME", 
                                           use_bias = False),
                       BatchNormalization()
    ]
    
    self.skip_layers = [] # ist leere liste
    if strides > 1: # wenn strides > 1, dann self.skip_layers nicht leere liste
      self.skip_layers = [
                          Conv2D(filters = filters, kernel_size = 1,
                                              strides = strides, padding = "SAME",
                                              use_bias = False),
                          BatchNormalization()
      ]

    def call(self, inputs):
      Z = inputs
      for layer in self.main_layers:
        Z = layer(Z)
      
      skip_Z = inputs
      for layer in self.skip_layers:
        skip_Z = layer(skip_Z)

      return self.activation(Z + skip_Z)

Codeblock 2: (Model mit meinem Custom Layer wird erstellt)

Code: Alles auswählen

resnet_model = Sequential([
                           Conv2D(filters= 64, kernel_size = 7, strides=2, 
                                  padding = "SAME", input_shape = [224, 224, 3]),
                           BatchNormalization(),
                           Activation("relu"),
                           MaxPool2D(pool_size = 3, strides = 2, padding = "SAME")
])

previous_filters = 64

for filters in [64]*3 + [128]*4 + [256]*6 + [512]*3 :
  strides = 1 if filters == previous_filters else 2
  resnet_model.add(ResidualUnit(filters, strides = strides)) # HIER: wird Custom Layer verwendet
  previous_filters = filters

resnet_model.add(GlobalAvgPool2D())
resnet_model.add(Flatten())
resnet_model.add(Dense(10, activation = "softmax"))

print(resnet_model.summary())


Re: Param# Spalte von model.summary() bei Conv2D layer den Wert 0

Verfasst: Freitag 17. Juni 2022, 18:05
von nichtSoGuter
Mir ist noch etwas aufgefallen. Die filteranzahl für meinen Custom layer (ResidualUnit) ist durchgängig bei 64. Die zählvariable "filters" der for schleife verändert zwar ihren wert. das wird aber leider nicht für meinem Custom layer ResidualUnit übernommen? Wieso aber nicht? die zählvariable "filters" wird mit dem Parameter "filters" des Custom Layers gleichgesetzt. Wenn sich die zählvaribale ändert (was sie tatsächlich tut), dann müsste sich doch auch der Parameter "filters " des Custom Laysers tun. Das tut der Paramter jedoch nicht.