铜梁网站建设,免费1级做爰网站,2022适合小学生的简短新闻,网页设计免费模板9466文章目录GoogLeNetInception Module1x1 Conv计算效果代码实现总结ResNet (残差网络)问题引入梯度消失与传统神经网络的比较代码实现课程来源#xff1a;
链接对于前篇中所提到问题#xff0c;设计出的是一种类似于LeNet5的线性结构#xff0c;而对于大多数问题#xff0c;简…
文章目录GoogLeNetInception Module1x1 Conv计算效果代码实现总结ResNet (残差网络)问题引入梯度消失与传统神经网络的比较代码实现课程来源
链接对于前篇中所提到问题设计出的是一种类似于LeNet5的线性结构而对于大多数问题简单的卷积神经网络无法满足需求因此需要对其进行改进使之成为一种更加复杂的网络。
GoogLeNet
GoogLeNet包括卷积Convolution池化Pooling、全连接Softmax以及连接Other四个部分。
而为了减少代码的冗余将由以上四个模块所组成的相同的部分封装成一个类/函数在GoogLeNet中这样的部分被称为Inception Module。 Inception Module
实际上Inception Module以及GoogLeNet自身只是一种基础的网络结构他的出现是为了解决构造网络时的部分超参数难以确定的问题。
以卷积核大小(kernel_size)为例虽然无法具体确定某问题中所应使用的卷积核的大小。但是往往可以有几种备选方案因此在这个过程中可以利用这样的网络结构来将所有的备选方案进行计算并在后续计算过程中增大最佳方案的权重以此来达到确定超参数以及训练网络的目的。
其中的具体成分可以根据问题进行调整本文中所详细介绍的Inception Module也仅用作参考。 在上述四个路径四种方法中最终的输出图必须仍然保持相同的W图像宽度以及H图像高度不然无法再次进行拼接传输到下一层模块中。
1x1 Conv
在1×11\times11×1卷积中每个通道的每个像素需要与卷积中的权重进行计算得到每个通道的对应输出再进行求和得到一个单通道的总输出以达到信息融合的目的。即将同一像素位置的多个通道信息整合在同位置的单通道上。
若需要得到多通道的总输出以M个通道为例则需M组的卷积进行计算再进行堆叠拼接。此处和前篇中的多通道卷积是一样的。 计算效果
为说明1×11 \times 11×1 卷积的效用举例原图为192×28×28192 \times 28 \times 28192×28×28的图像即192个通道宽高皆为28的图像。输出为32×28×2832 \times 28 \times 2832×28×28的图像即32个通道宽高皆为28的图像。为保证前后大小一致需要使每个像素都在卷积核的中央即对原图进行padding操作。 若单纯利用一个5×55 \times 55×5的卷积核进行卷积此时对于每一次卷积需要计算525^252次对于每一个通道需要计算28228^2282次卷积而原图中一共有128个通道则需要再计算128轮次此时得到一个单通道的28×2828 \times 2828×28的的输出因此需要重复上述计算32次才能得到一个32×28×2832 \times 28 \times 2832×28×28的输出。 即需要计算一亿两千万次以上 52×282×192×321204224005^2 \times 28^2 \times 192 \times 32 120422400 52×282×192×32120422400 而对于添加1×11 \times 11×1卷积核的结构按照上述过程进行计算仅需要计算一千两百万次左右整体耗费已经缩减到了原先的十分之一。 12×282×192×1652×282×16×16124336481^2 \times 28^2 \times 192 \times 16 5^2 \times 28^2 \times 16 \times 16 12433648 12×282×192×1652×282×16×1612433648 代码实现
为了便于代码说明此处将原Inception Module模块计算图进行了标注并对模块中的每一个标注进行单独的代码补充详解写在代码中
其中主要分为两部分即对于每一条计算路径上的每一个子模块都包括init定义以及forward计算两部分组成。 第一部分是由一个均值池化层以及一个输出通道为24的1×11 \times 11×1的卷积构成
#init内定义1x1卷积输入通道 输出通道 卷积核大小
self.branch_pool nn.Conv2d(in_channels, 24, kernel_size1)#forward内的方法
#avg_pool2d-均值池化函数 stride以及padding需要手动设置以保持图像的宽度和高度不变
branch_pool F.avg_pool2d(x, kernel_size3, stride1, padding1)
#括号内branch_pool的是池化后的结果括号外的branch_pool是定义的1x1卷积赋值给对象branch_pool
branch_pool self.branch_pool(branch_pool)第二部分是一个输出通道为16的单一的1×11 \times 11×1的卷积
#init中的定义
self.branch1x1 nn.Conv2d(in_channels, 16, kernel_size1)#将元数据直接用于卷积
branch1x1 self.branch1x1(x)第三部分包括一个输出通道为16的1×11 \times 11×1的卷积以及一个输出通道为24的5×55 \times 55×5的卷积
#init定义
self.branch5x5_1 nn.Conv2d(in_channels, 16, kernel_size1)
#设置padding是为了保持图像宽高不变
self.branch5x5_2 nn.Conv2d(16, 24, kernel_size5, padding2)#按照计算图的顺序进行forward嵌套运算
branch5x5 self.branch5x5_1(x)
branch5x5 self.branch5x5_2(branch5x5)第四部分包括一个输出通道为16的1×11 \times 11×1的卷积和两个输出通道为24的3×33 \times 33×3的卷积
self.branch3x3_1 nn.Conv2d(in_channels, 16, kernel_size1)
self.branch3x3_2 nn.Conv2d(16, 24, kernel_size3, padding1)
self.branch3x3_3 nn.Conv2d(24, 24, kernel_size3, padding1)branch3x3 self.branch5x5_1(x)
branch3x3 self.branch3x3_2(branch3x3)
branch3x3 self.branch3x3_3(branch3x3)此时经过计算后会得到各自通道数目不一但图像大小一致的四组图再利用Concatenate按通道维度方向进行拼接即可得到输出图像 这一过程的步骤如下。
outputs [branch1x1, branch5x5, branch3x3, branch_pool]
#dim1 意味着按下标为1的维度方向拼接在图像中即暗指通道B,C,W,H
return torch.cat(outputs, dim1)代码整理
class InceptionA(nn.Module):#仅是一个模块其中的输入通道数并不能够指明def __init__(self, in_channels):super(InceptionA,self).__init__()self.branch1x1 nn.Conv2d(in_channels, 16, kernel_size1)self.branch5x5_1 nn.Conv2d(in_channels, 16, kernel_size1)self.branch5x5_2 nn.Conv2d(16, 24, kernel_size5, padding2)self.branch3x3_1 nn.Conv2d(in_channels, 16, kernel_size1)self.branch3x3_2 nn.Conv2d(16, 24, kernel_size3, padding1)self.branch3x3_3 nn.Conv2d(24, 24, kernel_size3, padding1)self.branch_pool nn.Conv2d(in_channels, 24, kernel_size1)def forward(self, x):branch1x1 self.branch1x1(x)branch5x5 self.branch5x5_1(x)branch5x5 self.branch5x5_2(branch5x5)branch3x3 self.branch5x5_1(x)branch3x3 self.branch3x3_2(branch3x3)branch3x3 self.branch3x3_3(branch3x3)branch_pool F.avg_pool2d(x, kernel_size3, stride1, padding1)branch_pool self.branch_pool(branch_pool)outputs [branch1x1, branch5x5, branch3x3, branch_pool]return torch.cat(outputs, dim1)class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 nn.Conv2d(1, 10, kernel_size5)# 在Inception的定义中拼接后的输出通道数为2416242488个self.conv2 nn.Conv2d(88, 20, kernel_size5)self.incep1 InceptionA(in_channels10)self.incep2 InceptionA(in_channels20)self.mp nn.MaxPool2d(2)#关于1408#每次卷积核是5x5则卷积后原28x28的图像变为24x24的#再经过最大池化变为12x12的#以此类推最终得到4x4的图像又inception输出通道88则转为一维后为88x4x41408个self.fc nn.Linear(1408, 10)def forward(self,x):in_size x.size(0)x F.relu(self.mp(self.conv1(x)))x self.incep1(x)x F.relu(self.mp(self.conv2(x)))x self.incep2(x)x x.view(in_size, -1)x self.fc(x)return x总结
GooLeNet在于强调去把网络做得更加深层借此使网络变得更为复杂。
ResNet (残差网络)
问题引入
若将某个大小固定的卷积核进行反复迭代会不会得到更好的结果。
但事实上以CIFAR-10为例对于3×33 \times 33×3的卷积而言20层的训练效果要优于56层。由图中可以明显看出在训练集以及测试集中20层的误差是更小的。 其中最可能的原因是梯度消失问题。
梯度消失
由于在梯度计算的过程中是用的反向传播所以需要利用链式法则来进行梯度计算是一个累乘的过程。若每一个地方梯度都是小于1的即 ∂cost∂ω1\frac{\partial cost}{\partial \omega} 1 ∂ω∂cost1 ,则累乘之后的总结果应趋近于0即 ∂Cost∂Ω→0\frac{\partial Cost}{\partial \Omega} \to 0 ∂Ω∂Cost→0 由原先权重更新公式 ωω−α∂cost∂ω\omega \omega - \alpha \frac{\partial cost}{\partial \omega} ωω−α∂ω∂cost 可知∂cost∂ω\frac{\partial cost}{\partial \omega}∂ω∂cost趋近于0则ω\omegaω不会再进行进一步的更新。由于深度学习的网络层数较多为了解决梯度消失问题从而产生了ResNet。
与传统神经网络的比较
在Residual Net中引入了跳链接即让输入在N一般N2N2N2层连接后并入第N层的输出实现如图所示的 H(x)F(x)xH(x) F(x) x H(x)F(x)x 之后再进行relu激活,以此来得到输出。 在这样的结构中以上图为例如果要进行H(x)H(x)H(x)对xxx的求导则会有 ∂H(x)∂x∂F(x)∂x1\frac{\partial H(x)}{\partial x} \frac{\partial F(x)}{\partial x} 1 ∂x∂H(x)∂x∂F(x)1 即若存在梯度消失现象即存在某一层网络中的∂F(x)∂x→0\frac{\partial F(x)}{\partial x} \to 0∂x∂F(x)→0,由于上式存在则会使得在方向传播过程中传播的梯度会保持在1左右即∂H(x)∂x→1\frac{\partial H(x)}{\partial x} \to 1∂x∂H(x)→1.如此离输入较近的层也可以得到充分的训练。
代码实现
由于在ResNet中跳链接需要实现一个权重层结果与输入相加的操作则需要保证权重层的输出结果与输入的维度是相同的。即等宽等高等通道数。 上图中标问号的红色块是残差块其输入以及输出层的大小应当保持一致。
class RsidualBlock(nn.Module):def __init__(self, in_channels):super(RsidualBlock, self).__init__()#保持输出和输入一致self.channels in_channelsself.conv1 nn.Conv2d(in_channels, in_channels, kernel_size3, padding1)self.conv2 nn.Conv2d(in_channels, in_channels, kernel_size3, padding1)def forward(self, x):y F.relu(self.conv1(x))#第二层先求和再激活y self.conv2(y)return F.relu(xy)结构代码
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 nn.Conv2d(1, 16, kernel_size5)self.conv2 nn.Conv2d(16, 32, kernel_size5)self.mp - nn.MaxPool2d(2)self.rblock1 ResiduleBlock(in_channels16)self.rblock2 ResidualBlock(in_channels32)self.fc nn.Linear(512, 10)def forward(self,x):in_size x.size(0)x self.mp(F.relu(self.conv1(x)))x self.rblock1(x)x self.mp(F.relu(self.conv2(x)))x self.rblock2(x)x x.view(in_size, -1)x self.fc(x)return x
文章转载自: http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.wypyl.cn.gov.cn.wypyl.cn http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.lwmzp.cn.gov.cn.lwmzp.cn http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.stxg.cn.gov.cn.stxg.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.qnxkm.cn.gov.cn.qnxkm.cn http://www.morning.ygztf.cn.gov.cn.ygztf.cn http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.dwxqf.cn.gov.cn.dwxqf.cn http://www.morning.slmbg.cn.gov.cn.slmbg.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.kehejia.com.gov.cn.kehejia.com http://www.morning.fbjnr.cn.gov.cn.fbjnr.cn http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.wrlff.cn.gov.cn.wrlff.cn http://www.morning.rszt.cn.gov.cn.rszt.cn http://www.morning.mprtj.cn.gov.cn.mprtj.cn http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn http://www.morning.kryn.cn.gov.cn.kryn.cn http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn http://www.morning.bauul.com.gov.cn.bauul.com http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.dygqq.cn.gov.cn.dygqq.cn http://www.morning.wjpsn.cn.gov.cn.wjpsn.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.rytps.cn.gov.cn.rytps.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.tqsnd.cn.gov.cn.tqsnd.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.wflpj.cn.gov.cn.wflpj.cn http://www.morning.btgxf.cn.gov.cn.btgxf.cn http://www.morning.gblrn.cn.gov.cn.gblrn.cn http://www.morning.sfwcx.cn.gov.cn.sfwcx.cn http://www.morning.mzpd.cn.gov.cn.mzpd.cn http://www.morning.mtsck.cn.gov.cn.mtsck.cn http://www.morning.mksny.cn.gov.cn.mksny.cn http://www.morning.rxdsq.cn.gov.cn.rxdsq.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.bnygf.cn.gov.cn.bnygf.cn http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn http://www.morning.080203.cn.gov.cn.080203.cn http://www.morning.zqfjn.cn.gov.cn.zqfjn.cn http://www.morning.bxrqf.cn.gov.cn.bxrqf.cn http://www.morning.gqcd.cn.gov.cn.gqcd.cn http://www.morning.lnmby.cn.gov.cn.lnmby.cn http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn http://www.morning.lxthr.cn.gov.cn.lxthr.cn http://www.morning.zcncb.cn.gov.cn.zcncb.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn