resnet
前言
随着深度学习的不断发展,从开山之作Alexnet到VGG,网络结构不断优化,但是在VGG网络研究过程中,人们发现随着网络深度的不断提高,准确率却没有得到提高,如图所示:

人们觉得深度学习到此就停止了,不能继续研究了,但是经过一段时间的发展,残差网络(resnet)解决了这一问题。
一、resnet

如图所示:简单来说就是保留之前的特征,有时候当图片经过卷积进行特征提取,得到的结果反而没有之前的很好,所以resnet提出保留之前的特征,
这里还需要经过一些处理,在下面代码讲解中将详细介绍。
二、resnet网络结构

本文将主要介绍resnet18
三、resnet18
1.导包
import torch
import torchvision.transforms as trans
import torchvision as tv
import torch.nn as nn
from torch.autograd import Variable
from torch.utils import data
from torch.optim import lr_scheduler
2.残差模块
这个模块完成的功能如图所示:

class tiao(nn.Module):
def __init__(self,shuru,shuchu):
super(tiao, self).__init__()
self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuchu,kernel_size=(3,3),padding=(1,1))
self.bath=nn.BatchNorm2d(shuchu)
self.relu=nn.ReLU()
def forward(self,x):
x1=self.conv1(x)
x2=self.bath(x1)
x3=self.relu(x2)
x4=self.conv1(x3)
x5=self.bath(x4)
x6=self.relu(x5)
x7=x6+x
return x7
2.通道数翻倍残差模块
模块完成功能如图所示:

在这个模块中,要注意原始图像的通道数要进行翻倍,要不然后面是不能进行相加。
class tiao2(nn.Module):
def __init__(self,shuru):
super(tiao2, self).__init__()
self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(3,3),

本文介绍了ResNet网络结构,特别是ResNet18的实现,通过残差模块和通道数翻倍的残差模块解决深度网络中准确率随层数增加而降低的问题。文章详细展示了ResNet18的网络结构、数据处理、损失函数、优化器设置、训练过程以及模型保存和测试。实验证明,ResNet18在加深网络层次的同时保持了良好的模型性能。
最低0.47元/天 解锁文章
2万+





