параметр показывает ноль в сводке модели, когда при создании модели используется пользовательский слой

#deep-learning #computer-vision #tensorflow2.0

#глубокое обучение #компьютерное зрение #тензорный поток 2,0

Вопрос:

Я пытался создать инцепционную сеть. Я создал индивидуальное начальное подразделение. Каким-то образом, когда я использую его в своей модели, общие параметры в сводке модели отображаются равными нулю. Может ли кто-нибудь любезно указать мне, где я совершаю ошибку.

Код для начального уровня единицы измерения

 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() введите описание изображения здесь

Ответ №1:

Нашел ответ. Я создавал слои в методе вызова. Вместо этого я должен создавать их внутри метода инициализации, а затем использовать их в методе вызова.