我正在尝试在我的模型中实现He_normal核初始化和全局平均池化,但我不知道该如何做。
#beginmodelmodel = 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层都有一个初始化器参数,你可以使用它来传递你的初始化方法(Keras中已经包含了he_normal)。
对于图像的全局平均池化会将网络的维度降低到2D。它可以替代flatten操作使用。
如果你在进行分类问题,我建议你在最后一层使用softmax激活函数来获取概率分数。
这里是一个例子
n_class, n_samples = 10, 3X = 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)