基于深度学习框架pytorch搭建卷积神经网络ResNet

在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。深度学习框架PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。它不仅更加灵活,支持动态图,而且提供了强大的Python接口。
在这里插入图片描述

神经网络难以训练的问题

神经网络

有两种常见的方案来解决这个问题:
按层训练,先训练比较浅的层,然后在不断增加层数
使用更宽的层,或者增加输出通道,而不加深网络的层数
这两种方案或多或少的都存在一些问题,ResNet 通过引入了跨层连接(残差块)解决了梯度回传消失的问题。
ResNet
2015 年 ImageNet 比赛上卷积神经网络ResNet大获全胜,它是由微软亚洲研究院提出的,ResNet 有效地解决了深度神经网络难以训练的问题,可以训练高达 1000 层的卷积网络。

普通连接和跨层连接

在这里插入图片描述

如图所示,左边的表示普通的卷积神经网络的连接方式,上层的梯度必须要一层一层传回来。而右边的图使用的是跨层连接(残差块),相当于中间有了一条更短的路,梯度能够从这条更短的路传回来,避免了梯度过小的情况,残差网络ResNet的结构其实就是上面这种残差块的堆叠。
使用pytorch搭建ResNet
使用深度学习框架pytorch可以快速方便的帮助我们搭建一个卷积神经网络ResNet,具体代码如下所示:

def conv3x3(in_channel, out_channel, stride=1):
 return nn.Conv2d(in_channel, out_channel, 3, stride=stride, padding=1, bias=False)
class residual_block(nn.Module):
 def __init__(self, in_channel, out_channel, same_shape=True):
 super(residual_block, self).__init__()
 self.same_shape = same_shape
 stride=1 if self.same_shape else 2
 
 self.conv1 = conv3x3(in_channel, out_channel, stride=stride)
 self.bn1 = nn.BatchNorm2d(out_channel)
 
 self.conv2 = conv3x3(out_channel, out_channel)
 self.bn2 = nn.BatchNorm2d(out_channel)
 if not self.same_shape:
 self.conv3 = nn.Conv2d(in_channel, out_channel, 1, stride=stride)
 
 def forward(self, x):
 out = self.conv1(x)
 out = F.relu(self.bn1(out), True)
 out = self.conv2(out)
 out = F.relu(self.bn2(out), True)
 
 if not self.same_shape:
 x = self.conv3(x)
 return F.relu(x+out, True)

这就是基于深度学习框架pytorch搭建卷积神经网络ResNet的原理和过程

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻风_huanfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值