he_normal 内核初始化和全局平均池化

he_normal kernel initialization and global average pooling

我正在尝试在我的模型中实现 he_normal 内核初始化和全局平均池化,但我不知道该怎么做。

#beginmodel
model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=(100, 100,1)),
    MaxPooling2D(),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(128, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Flatten(),
    Dense(215, activation='relu'),
    Dense(10)
])

每个 keras 层都有一个初始化参数,因此您可以使用它来传递您的初始化方法(he_normal 存在于 keras 中)。

图像的全局平均池化将网络的维度降低到二维。它可以用来代替展平操作。

如果你正在执行分类问题,我建议你在最后一层也使用 softmax 激活来获得概率分数。

举个例子

n_class, n_samples = 10, 3
X = np.random.uniform(0,1, (n_samples,100,100,1))
y = np.random.randint(0,n_class, n_samples)

model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', kernel_initializer='he_normal',
           input_shape=(100, 100,1)),
    MaxPooling2D(),
    Conv2D(32, 3, padding='same', activation='relu', kernel_initializer='he_normal'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu', kernel_initializer='he_normal'),
    MaxPooling2D(),
    Conv2D(128, 3, padding='same', activation='relu', kernel_initializer='he_normal'),
    GlobalAvgPool2D(),
    Dense(215, activation='relu'),
    Dense(n_class, activation='softmax')
])

model.compile('adam', 'sparse_categorical_crossentropy')
model.fit(X,y, epochs=3)