【发布时间】: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'))
【问题讨论】:
标签: deep-learning computer-vision tensorflow2.0