3

我正在为我的模型添加一些批量标准化,以缩短训练时间,遵循一些教程。这是我的模型:

model = Sequential()

model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', input_shape=(64,64,3)))
model.add(BatchNormalization())

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(256, kernel_size=(3, 3), activation='relu'))
model.add(BatchNormalization())

model.add(MaxPooling2D(pool_size=(2, 2)))


model.add(Flatten())

model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

#NB: adding more parameters increases the probability of overfitting!! Try to cut instead of adding neurons!! 
model.add(Dense(units=512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(units=20, activation='softmax'))

如果没有批量标准化,我的数据准确率大约为 50%。添加批量标准化会破坏我的性能,验证准确度会降低到 10%。

在此处输入图像描述

为什么会这样?

4

2 回答 2

1

我不确定这是否是您要问的,但是批标准化在验证期间仍然有效,只是参数是在训练期间定义和设置的,而在验证期间没有更改。

至于为什么批量标准化通常不适合您的模型/问题,它就像任何超参数一样,有些适用于某些场景,但不适用于其他场景。您知道这是否是您网络中 BN 的最佳位置吗?除此之外,还需要更多地了解您的数据和问题,以便做出进一步的猜测。

于 2019-11-27T18:10:19.850 回答
1

尝试使用较少数量的批量标准化层。在最后一个卷积层使用它是一种普遍的做法。从其中一个开始,如果它提高了验证的准确性,可以添加更多。

于 2020-10-13T01:07:55.767 回答