conv-neural-network - CNN 只有 2 个 ConvLayer 时的批量归一化?
问题描述
我想知道当 CNN 中只有 2 个卷积层时使用 BatchNormalization 是否有问题。这会对分类性能产生不利影响吗?现在我指的不是训练时间,而是准确度?我的网络是否因不必要的层而过载?我想用一个小数据集训练网络。
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), padding = 'same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compilke(optimizer="Adam", loss='categorical_crossentropy, metrics =['accuracy'])
非常感谢。
解决方案
不要与 Dropout 一起使用
批量归一化提供了一些正则化效果,减少了泛化错误,也许不再需要使用dropout 进行正则化。
从 Modified BN-Inception 中移除 Dropout 可以加快训练速度,而不会增加过拟合。
— 批量标准化:通过减少内部协变量偏移来加速深度网络训练,2015 年。
此外,在同一个网络中使用批量标准化和 dropout 可能不是一个好主意。
原因是由于在 dropout 过程中节点的随机丢弃,用于规范前一层激活的统计数据可能会变得嘈杂。
批量归一化有时还可以减少泛化误差并允许省略 dropout,因为用于归一化每个变量的统计量估计中存在噪声。
— 第 425 页,深度学习,2016 年。
推荐阅读
- powerbi - Power BI 中的时间动态存储桶
- python - 带有 keras 和遮罩层的可变长度序列
- ios - 如何使用 MagicalRecord for Swift 4 正确获取数据?
- python - 在python中抓取,选择器返回空列表
- python-3.x - 从标题中删除引号
- sql - Postgresql - 三张表。两个连接。不相关的结果
- javascript - React - “异步加载的外部脚本”错误
- c++ - 打开 SSL 简单加密/解密 C++
- nativescript - 带有 YoutubePlayer 插件的 NativeScript-Vue 在 Android 中不起作用
- css - 使用 CSS 将光标移动到另一个元素