【深度学习】卷积神经网络中Dropout、BatchNorm的位置选择

前言

卷积神经网络的设计自然要考虑到各层之间的顺序。这种“考虑”既有原理性的解释也有经验方面的原因。本文主要介绍一些层常见的位置选择,并对其原因进行分析,从中提取共性有利于其他模型的设计。

Dropout层的位置

Dropout一般放在全连接层防止过拟合,提高模型返回能力,由于卷积层参数较少,很少有放在卷积层后面的情况,卷积层一般使用batch norm。
全连接层中一般放在激活函数层之后,有的帖子说一定放在激活函数后,个人推测是因为对于部分激活函数输入为0输出不一定为0,可能会起不到效果,不过对于relu输入0输出也是0就无所谓了。

BatchNorm

BatchNorm归一化放在激活层前后好像都有,最初LeNet有一种归一化放在了激活层池化层后面,而现在普遍放在激活层前。

bn原文建议放在ReLU前,因为ReLU的激活函数输出非负,不能近似为高斯分布。但有人做了实验,发现影响不大,放在后面好像还好了一点,放在ReLU后相当于直接对每层的输入进行归一化,如下图所示,这与浅层模型的Standardization是一致的。
所以在激活层前还是后还是很难下定论的,只是现在习惯放在激活层前,区别不是很大,区别大的是是否使用bn。
这里做了很多实验,可以参考:https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md

参考资料

https://www.cnblogs.com/shine-lee/p/11989612.html#bn%E5%B1%82%E6%94%BE%E5%9C%A8relu%E5%89%8D%E9%9D%A2%E8%BF%98%E6%98%AF%E5%90%8E%E9%9D%A2%EF%BC%9F

深度学习中的卷积神经网络(Convolutional Neural Network, CNN)是一种专门设计用于处理网格状数据结构(如图像)的神经网络模型。在PyTorch框架中,构建CNN通常包含以下几个步骤: 1. **导入库**:首先需要导入PyTorch的核心库`torch`以及其相关的模块,例如`torch.nn`用于构建网络层。 2. **创建网络架构**:定义一个继承自`nn.Module`的类,这个类会封装整个网络。常见的层包括`nn.Conv2d`(二维卷积层)、`nn.MaxPool2d`(池化层)、`nn.BatchNorm2d`(批标准化层)等。 ```python import torch from torch import nn class ConvNet(nn.Module): def __init__(self, num_classes): super(ConvNet, self).__init__() self.conv_layers = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2) ) self.fc_layers = nn.Sequential( nn.Linear(in_features=64 * 8 * 8, out_features=512), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(512, num_classes) ) def forward(self, x): x = self.conv_layers(x) x = x.view(-1, 64 * 8 * 8) # Flatten the feature map x = self.fc_layers(x) return x ``` 3. **初始化模型并训练**:实例化网络,设置损失函数、优化器,然后通过`train()`和`forward()`方法进行训练。 ```python model = ConvNet(num_classes=10) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # Training loop... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值