zoukankan      html  css  js  c++  java
  • resnet的一点小理解

    • 以resnet18为例

    • 分为三个部分:set load model

     

    set

    很多数据集都是从dataset里引用的

    如果我想改输入图片的大小,比如说将32改为80,会有reshape函数去改变可以用自动填充去看看函数的参数,应该是两个参数,一个是要改为的量,一个是方法(可能是,未验证),一般方法是两个(斜方向)像素点中进行变化,如果是变小的话,也是一定的变化,这些都不是原来的像素点了。

    set用的图片格式有两种,一种是pil类中的格式,一种是torch中的tensor,cv2(opencv)中是一个GBR图,需要换顺序,而且还变为一个numpy类型的量(具体有点迷糊了,有时间看看numpy类

    load:

    一个是载入功能,一个是打包,打乱功能,这里batch_size=128,也就是参数大小的第一维=128

    model:

    model:一些变量含义:

    in_planes:输入的通道数 planes:输出的通道数 stride:步长padding:补充0的个数(注意是两边加)kernel_size:(卷积核的大小)

     basicblock是一个两层的卷积,2个layer1,2个layer2,2个layer3,2个layer4

    一开始输入的是(128,3,32,32)128为批量数,3为rgb所以是3个通道的,32*32为大小

    Resnet在CIFAR10上的实践和论文里有明显的差异,用论文里的实现会出现什么问题?为什么?

    论文中第一层卷积kernal=7同时有一个最大池化

    cifar10中第一次卷积核为3,且没有最大池化

    (核大小的差别:重点集中的感觉?可以试试

    (分辨率?(体现的方面))

    想要增大图片的大小(分辨率)可以将maxpooling往后放,或者padding增大,但可能会造成边缘没有意义啥的(可以尝试一下)。

    经过第一次卷积:

     通道变为64,大小为(32+2*1-3+1)/1=32,(128,64,32,32)

    卷积核公式:(初始维数+2*padding-kernel_size+1)/stride(向上取整)

    而后经过【2,2,2,2】次卷积,就是2个layer1,2个layer2,2个layer3,2个layer4

     这里要注意make_layer会有一个shortcut的过程,就是将维数变为一致,因为在forward中最后有一个相加的过程

    在stride=1时没有这个过程,在stride=2时存在这个过程。

     两层的stride不同,只有第一层有shortcut的过程

    经过layer1:(128,64,32,32)->(128,64,32,32)->(128,64,32,32)

    经过layer2:(128,64,32,32)->(128,128,16,16)->(128,128,16,16)

    经过layer3:(128,128,16,16)->(128,256,8,8)->(128,256,8,8)

    经过layer4:(128,256,8,8)->(128,512,4,4)->(128,512,4,4)

    这里都是转录任务

     这是分类任务

     

    out = out.view(out.size(0), -1) 这里out.size(0)是指out第一维的大小(在这为128),-1指直接算出为多少,也可以写为512*4*4,就是一个变化将这个4维向量变为2维向量。(avg_pool2d不太懂

    这里就完成了整个resnet

    一些需要尝试的地方

    • l  BN单元:BN在现代神经网络的进化中占有重要地位,去除BN,会有什么影响?

    加快网络的训练和收敛的速度,即我们可以使用较大的学习率

    控制梯度爆炸防止梯度消失

    防止过拟合

    • l  隐藏层宽度:Resnet默认具有四个阶段,每个阶段的输入的频道数都不同,试着降低或者提高这些通道,有什么影响?
    • l  训练策略:标准的Resnet训练策略是什么?(CIFAR10)改变这些策略组,会有什么影响?

    cifar10:

    这里用的是SGD,试试Adam等

     可以看看这个CosineAnnealingLR

    • l  线性策略(resnet18试试看这个策略用于学习率怎么样)

    τ:使训练集遍历几百次
    ϵτ​:约为ϵ0​的1\%1%

    ϵ0​:检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率[李4] ,但又不能太大导致严重的震荡。(学习率的选择)

    在τ步迭代之后,一般使ϵ保持常数。

     
  • 相关阅读:
    20110603 本日跌的股票之后一段时间轻易不要碰
    一日三省
    火电排污新标准年内出台 撬动千亿脱硝市场
    20082011大股东增持专题
    收评:5月24日资金流向(摘自益盟)
    2011年中期业绩预增前20家公司
    2011大股东十大增持概念股全景图
    放不下期货
    从众是通向地狱最廉价的门票
    在ASP.NET中获取Get方式和Post方式提交的数据
  • 原文地址:https://www.cnblogs.com/lllllllm/p/14891118.html
Copyright © 2011-2022 走看看