如何在Keras中调用BatchNormalization函数?
计算机/软件
0 248
0

如果我想在Keras中使用BatchNormalization函数,那么是否仅需要在开始时调用一次? 下面是我尝试使用的代码:

model = Sequential()
keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None)
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

这是我用第二行(包括批处理规范化)运行的代码。而如果我不使用第二行运行代码,也会得到类似的输出。因此,要么我没有在正确的地方调用该函数,要么我猜它并没有太大的区别。

收藏
2021-02-01 11:07 更新 anna •  2553
共 1 个回答
高赞 时间
0

批处理规范化只是另一个层,你可以使用它来创建所需的网络体系结构。

一般是在网络的线性层和非线性层之间使用BN,因为它可以将激活函数的输入标准化,从而使其位于激活函数(例如Sigmoid)的线性部分的中心。在上述情况下,这可能类似于:

# import BatchNormalizationfrom keras.layers.normalization import BatchNormalization
# instantiate model
model = Sequential()
# we can think of this chunk as the input layer
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
# we can think of this chunk as the hidden layer    
model.add(Dense(64, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
# we can think of this chunk as the output layer
model.add(Dense(2, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('softmax'))
# setting up the optimization of our weights 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
# running the fitting
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

Via:https://stackoverflow.com/a/37979391/14964791

收藏
2021-02-01 11:30 更新 karry •  1778