pytorch5--卷积神经网络

目录

一.卷积神经网络

1.卷积

2.Down sample、Up sample

3.Relu

4.Batch-Norm

二.经典卷积神经网络

ResNet原理

ResNet实现


一.卷积神经网络

1.卷积

全连接层参数量非常大,提出局部相关性,权值共享的思想。

pytorch5--卷积神经网络_第1张图片

卷积操作的实现,最左边为一张图片的RGB,input x有b张图片,3个RGB通道,图片大小28*28;每一个卷积核[3,3,3],第一个3代表与输入RGB相同,后面是卷积核大小;一共有16个卷积核;即16个偏置;根据如图卷积运算,out为b个图片,每个图片16个卷积结果,大小为28*28。

pytorch5--卷积神经网络_第2张图片pytorch5--卷积神经网络_第3张图片

nn.Conv2d

layer=nn.Conv2d(1,3,kernel_size=3,stride=1,padding=0)
x=torch.rand(1,1,28,28)
out=layer(x)

2.Down sample、Up sample

maxpooling,降维

layer=nn.MaxPool2d(2,stride=2)#第一个参数为窗的大小

3.Relu

卷积神经网络一个unit:Conv2d->Batch-Norm->Pool->Relu,后面三个顺序取决于用户。

4.Batch-Norm

特征缩放,更利于数据搜索最优解。把数据按通道缩放到N~(0,1)

advantages

  • Converge faster
  • Better performance
  • Robust
x.shape
out:torch.Size([1,16,7,7])

layer=nn.BatchNorm2d(16)

二.经典卷积神经网络

  • LeNet-5:2+3
  • AlexNet:5+3
  • VGG:11,16,19

1*1卷积核,保证图片大小不变的同时,利于卷积核降维。减少通道数、降低计算量[16,256,28,28]->[16,32,1,1]----[16,32,28,28]

  • GooleNet:22层
  • ResNet:每隔多少层加一个短路层

ResNet原理

加入短路层,最少不会比短路层之前层数的网络结构差。

pytorch5--卷积神经网络_第4张图片

ResNet实现

pytorch5--卷积神经网络_第5张图片

class ResBlk(nn.Module):
    def __init__(self,ch_in,ch_out):
        self.conv1 = nn.Conv2d(ch_in,ch_out,kernel_size=3,stride=1,padding=1)
        self.bn1 = nn.BatchNorm2d(ch_out)
        self.conv2 = nn.Conv2d(ch_out,ch_out,kernel_size=3,stride=1,padding=1)
        self.bn2 = nn.BatchNorm2d(ch_out)
        

        self.extra = nn.Sequential()
        #如果输入输出channel不一致
        if ch_out != ch_in:
            self.extra = nn.Sequential(
                    nn.Conv2d(ch_in,ch_out,kernel_size=1,stride=1),
                nn.BatchNorm2d(ch_out)
            )
            
    def forward(self,x):
        out = F.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out = self.extra(x) + out
        return out

 

你可能感兴趣的:(pytorch)