python - keras 中的 BatchNormalization 层导致验证精度波动
问题描述
我正在尝试将 BatchNorm 层用于图像分类任务,但我在 keras 实现方面遇到了问题。当我使用 BatchNormalization 层运行相同的网络时,我得到了更好的训练准确度和验证准确度,但在训练期间验证准确度波动很大。以下是培训调查的样子。
我尝试更改批量大小(从 128 到 1024),并在 batchnorm 层中更改动量参数,但变化不大。
我在 conv/Dense 层和它们的激活层之间使用 batchnorm。
我还检查了转换层的归一化轴是否正确(Theano 的轴 = 1)。
有没有人遇到过类似的问题?有一些关于 keras 实现 batchnorm 的问题,但我还没有找到解决这个问题的方法。
感谢您对类似问题的任何指示或参考。
编辑:这是我用来构建 mdoel 的 keras 代码,但我尝试了不同的架构和不同的势头:
# create model
model = Sequential()
model.add(Conv2D(20, (4, 4), input_shape=(input_channels,s,s), activation='relu'))
model.add(MaxPooling2D(pool_size=(5, 5)))
model.add(Conv2D(30, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(GlobalAveragePooling2D())
model.add(Dense(128))
if use_batch_norm:
model.add(BatchNormalization(axis=1, momentum=0.6))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(nb_classes))
if use_batch_norm:
model.add(BatchNormalization(axis=1, momentum=0.6))
model.add(Activation('softmax'))
解决方案
推荐阅读
- python - 由于德语变音符号,Python中的字符串不相等
- php - 如何设置 WordPress 导航系统的样式,使其看起来像这样?
- r - Access input ID of reactive radioButtons in shiny app
- sql-server - System.Data.SqlClient.SqlException:“将 varchar 值 'gcobani' 转换为数据类型 int 时转换失败。”
- linux - 使用 grep 时如何获取查询订单输出?
- python - 从 Jupyter Notebook 显示和保存 PGF 图
- node.js - npm install 完成时播放声音或通知
- javascript - 箱线图上的两个 x 轴
- javascript - 有没有比 for 循环更快的方法来对 javascript 中的图像进行阈值处理?
- angular - ng-bootstrap 分页无法通过 i18n 覆盖“下一个”、“上一个”