23暑假深度学习 week3-ResNet

一、ResNet和ResNeXt

为了解决深层网络的梯度消失和梯度爆炸问题,引入了残差结构到深度学习网络中。将网络之前层的输出跳过中间几层与输出相加,因为特征图尺寸和维度不同,所以残差结构需要将特征图尺寸和维度改至与输出相同后再相加。因为加法不会使梯度叠加,所以很大的缓解了梯度爆炸和梯度消失问题,提升模型性能。

ResNeXt将残差分为若干个支路,左图所示的结果在计算上等效于右图,右图就是分组卷积,将32个通道为一组使用一个卷积核,每组之间不共享权值。这样做可以减少参数量,加快网络速度,同时分组卷积相比普通的卷积并不会使模型效果更差。

 

二、猫狗大战

训练集共20000张图片,预处理将图片裁剪为224*224大小,转为tensor后进行归一化。测试集进行相同的预处理。设置batch size=64,使用SGD优化器,学习率为0.001,打乱训练集进行训练。

首先使用lenet来完成,lenet网络代码如下。

class LeNet(nn.Module):  # 继承于nn.Module这个父类
    def __init__(self):  # 初始化网络结构
        super(LeNet, self).__init__()  # 多继承需用到super函数
        self.conv1 = nn.Conv2d(3, 16, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(89888, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 2)

    def forward(self, x):  # 正向传播过程
        x = F.relu(self.conv1(x))  
        x = self.pool1(x)  
        x = F.relu(self.conv2(x))  
        x = self.pool2(x)  
        x = x.view(-1, 89888)  
        x = F.relu(self.fc1(x)) 
        x = F.relu(self.fc2(x))  
        x = self.fc3(x)  
        return x

其中的全连接层fc1的输入大小是根据图片大小和之前的卷积操作计算得到的,输入图片被resize到224*224大小。由于该任务只分两类,所以最后的输出为2。

训练5轮,训练结果如下。

 对测试集进行测试,将结果上传至平台,第一次只有0.1分,发现输出结果需按图片名称排序,从小到大输出后,上传结果,得分73.9。

再使用经过预训练的resnet34,训练5轮,训练结果如下。用时对比lenet多了将近一倍,但在验证集上的准确率达到99%,将预测结果上传至平台得到99.45分。

 

三、问题总结

2.Batch Normailization 的原理,思考 BN、LN、IN 的主要区别。

批量归一化将样本值减去该批样本均值后再除以该批样本的标准差,使该批样本值满足正态分布,使每批样本都处在一个值稳定的范围,使收敛更平稳。

BN处理的是一批样本的同一维度,LN处理的是一个样本的所有维度,IN处理的是一个样本的一个维度。LN对一个样本的所有通道求均值和方差,再归一化该样本的所有通道上的值。IN对一个样本的一个通道求均值和方差,再归一化该通道上的值。

3.为什么分组卷积可以提升准确率?即然分组卷积可以提升准确率,同时还能降低计算量,分数数量尽量多不行吗?

使用分组卷可以减少参数量,加快训练速度,不同组的卷积可以学习不同的特征,相互也不会影响,可以提高准确率,但分组过多时训练将会接近随机梯度下降,即一批内只有一个样本,会导致性能下降。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值