manbetx官方网站

上笔记TF033:实现ResNet学习笔记TF033:实现ResNet

九月 30th, 2018  |  manbetx官方网站

ResNet(Residual Neural Network),微软研究院 Kaiming
He等4叫作中国人提出。通过Residual Unit训练152叠深神经网络,ILSVRC
2015竞技冠军,3.57%
top-5错误率,参数量比VGGNet低,效果大突出。ResNet结构,极快加速跨好神经网络训练,模型准确率非常大提升。Inception
V4,Inception Module、ResNet结合。ResNet推广性好。

ResNet(Residual Neural Network),微软研究院 Kaiming
He等4名为华人提出。通过Residual Unit训练152层深神经网络,ILSVRC
2015竞技冠军,3.57%
top-5错误率,参数量比VGGNet低,效果特别突出。ResNet结构,极快加速跨杀神经网络训练,模型准确率非常大提升。Inception
V4,Inception Module、ResNet结合。ResNet推广性好。

瑞十教授Schmidhuber(LSTM网络发明者,1997年)提出Highway
Network。解决最生神经网络难训练问题。修改每层激活函数,此前激活函数只是对输入非线性变换y=H(x,WH),Highway
NetWork保留得比例原始输入x,y=H(x,WH)·T(x,WT)+x·C(x,WC),T变换系数,C保留系数,令C=1-T。前面一重合信息,一定比例不经矩阵乘法和不线性变换,直接传输下一样叠。Highway
Network,gating
units学习决定网络信息流,学习原始信息应封存比例。gating机制,Schmidhuber教授早年LSTM循环神经网络gating。几百上主交汇深Highway
Network,直接梯度下降算法训练,配合多种非线性激活函数,学习太生神经网络。Highway
Network允许训练任意深度网络,优化措施和网深度独立。

瑞十教授Schmidhuber(LSTM网络发明者,1997年)提出Highway
Network。解决最生神经网络难训练问题。修改每层激活函数,此前激活函数只是对输入非线性变换y=H(x,WH),Highway
NetWork保留一定比重原始输入x,y=H(x,WH)·T(x,WT)+x·C(x,WC),T变换系数,C保留系数,令C=1-T。前面一重合信息,一定比例不通过矩阵乘法和不线性变换,直接传输下一样重叠。Highway
Network,gating
units学习决定网络信息流,学习原始信息应封存比例。gating机制,Schmidhuber教授早年LSTM循环神经网络gating。几百高达主交汇深Highway
Network,直接梯度下降算法训练,配合多种非线性激活函数,学习最好生神经网络。Highway
Network允许训练任意深度网络,优化措施和网深度独立。

ResNet
允许老输入信息一直传输至后层。Degradation问题,不断强化神经网络深度,准确率先上升及饱和,再降低。ResNet灵感,用全等映射直接用前层输出传到后层。神经网络输入x,期望输出H(x),输入x直接招至输出作初始结果,学习目标F(x)=H(x)-x。ResNet残差上单元(Residual
Unit),不再上共同体输出H(x),只学输出输入差别H(x)-x,残差。

ResNet
允许老输入信息直接传输至后层。Degradation问题,不断加深神经网络深度,准确率先上升及饱和,再下滑。ResNet灵感,用全等映射直接拿前层输出传到后层。神经网络输入x,期望输出H(x),输入x直接招至输出作初始结果,学习目标F(x)=H(x)-x。ResNet残差上单元(Residual
Unit),不再上完输出H(x),只上输出输入差别H(x)-x,残差。

ResNet,很多旁路支线,输入直接连到后层,后层直接攻读残差,shortcut或connections。直接将输入信息绕道传至输出,保护信息完整性,整个网络就学习输入、输出差别,简化学习目标、难度。

ResNet,很多旁路支线,输入直接连到后层,后层直接攻读残差,shortcut或connections。直接以输入信息绕道传至输出,保护信息完整性,整个网络就念输入、输出差别,简化学习目标、难度。

零星交汇残新式学习单元包含两单相同输出通道数3×3卷积。三叠残差网络用Network
In Network和Inception Net
1×1卷积。在中间3×3窝积前后都因此1×1卷积,先降维再升维。如果输入输出维度不同,对输入x线性映射变换维度,再接后层。

少交汇残新式学习单元包含两独一样输出通道数3×3窝积。三层残差网络用Network
In Network和Inception Net
1×1窝积。在中间3×3卷积前后都用1×1窝积,先降维再升维。如果输入输出维度不同,对输入x线性映射变换维度,再连后层。

layername outputsize 18-layer 34-layer 50-layer 101-layer 152-layer
conv1 112×112 7×7,64,stride 2
conv2_x 56×56 3×3 max pool,stride 2
3×3,64×2 3×3,64×3 1×1,64×3 1×1,64×3 1×1,64×3
3×3,64 3×3,64 3×3,64 3×3,64 3×3,64
1×1,256 1×1,256 1×1,256
conv3_x 28×28 3×3,128×2 3×3,128×4 1×1,128×4 1×1,128×4 1×1,128×8
3×3,128 3×3,128 3×3,128 3×3,128 3×3,128
1×1,512 1×1,512 1×1,512
conv4_x 14×14 3×3,256×2 3×3,256×6 1×1,256×6 1×1,256×23 1×1,256×36
3×3,256 3×3,256 3×3,256 3×3,256 3×3,256
1×1,1024 1×1,1024 1×1,1024
conv5_x 7×7 3×3,512×2 3×3,512×3 1×1,512×3 1×1,512×3 1×1,512×3
3×3,512 3×3,512 3×3,512 3×3,512 3×3,512
1×1,2048 1×1,2048 1×1,2048
1×1 average pool,1000-d fc,softmax
FLOPs 1.8×10^9 3.6×10^9 3.8×10^9 7.6×10^9 11.3×10^9

layername outputsize 18-layer 34-layer 50-layer 101-layer 152-layer
conv1 112×112 7×7,64,stride 2
conv2_x 56×56 3×3 max pool,stride 2
3×3,64×2 3×3,64×3 1×1,64×3 1×1,64×3 1×1,64×3
3×3,64 3×3,64 3×3,64 3×3,64 3×3,64
1×1,256 1×1,256 1×1,256
conv3_x 28×28 3×3,128×2 3×3,128×4 1×1,128×4 1×1,128×4 1×1,128×8
3×3,128 3×3,128 3×3,128 3×3,128 3×3,128
1×1,512 1×1,512 1×1,512
conv4_x 14×14 3×3,256×2 3×3,256×6 1×1,256×6 1×1,256×23 1×1,256×36
3×3,256 3×3,256 3×3,256 3×3,256 3×3,256
1×1,1024 1×1,1024 1×1,1024
conv5_x 7×7 3×3,512×2 3×3,512×3 1×1,512×3 1×1,512×3 1×1,512×3
3×3,512 3×3,512 3×3,512 3×3,512 3×3,512
1×1,2048 1×1,2048 1×1,2048
1×1 average pool,1000-d fc,softmax
FLOPs 1.8×10^9 3.6×10^9 3.8×10^9 7.6×10^9 11.3×10^9

ResNet结构,消除层数不断加重训练集误差增大现象。ResNet网络训练误差随层数增大逐渐削弱多少,测试集表现变好。Google借鉴ResNet,提出Inception
V4和Inception-ResNet-V2,ILSVRC错误率3.08%。《Identyty Mappings in Deep
Residual Networks》提出ResNet
V2。ResNet残差上单元传播公式,前馈信息和举报信号可直接传输。skip
connection 非线性激活函数,替换Identity
Mappings(y=x)。ResNet每层还用Batch Normalization。

ResNet结构,消除层数不断深化训练集误差增大现象。ResNet网络训练误差随层数增大逐渐削弱多少,测试集表现变好。Google借鉴ResNet,提出Inception
V4和Inception-ResNet-V2,ILSVRC错误率3.08%。《Identyty Mappings in Deep
Residual Networks》提出ResNet
V2。ResNet残差上单元传播公式,前馈信息与反映信号可一直传输。skip
connection 非线性激活函数,替换Identity
Mappings(y=x)。ResNet每层都用Batch Normalization。

Schmidhuber教授,ResNet,没有gates
LSTM网络,输入x传递到后层过程一直有。ResNet等价RNN,ResNet类似多重合网络之中集成方法(ensemble)。

Schmidhuber教授,ResNet,没有gates
LSTM网络,输入x传递及后层过程一直闹。ResNet等价RNN,ResNet类似多重合网络中集成方法(ensemble)。

《The Power of Depth for Feedforward Neural
Networks》,理论证明加深网络比较加宽网络又使得。

《The Power of Depth for Feedforward Neural
Networks》,理论证明加深网络比较加宽网络又有效。

Tensorflow实现ResNet。contrib.slim库,原生collections。collections.namedtuple设计ResNet基本Block模块组named
tuple,创建Block类,只有数据结构,没有具体方法。典型Block,三个参数,scope、unit_fn、args。
Block(‘block1’, bottleneck, [(256, 64, 1)] * 2 + [(256, 64,
2)]),block1是Block名称(或scope),bottleneck是ResNet
V2残见仁见智上单元。最后参数是Block
args,args是列表,每个元素对应bottleneck残差学习单元。前面两个元素(256,
64, 1),第三因素(256, 64,
2),每个元素都是三元tuple(depth,depth_bottleneck,stride)。(256, 64,
3)代表bottleneck残差学习单元(三只卷积层),第三重合输出通道数depth
256,前少重合输出通道数depth_bottleneck 64,中间层步长stride
3。残差学习单元结构[(1×1/s1,64),(3×3/s3,64),(1×1/s1,256)]。

Tensorflow实现ResNet。contrib.slim库,原生collections。collections.namedtuple设计ResNet基本Block模块组named
tuple,创建Block类,只有数据结构,没有具体方法。典型Block,三只参数,scope、unit_fn、args。
Block(‘block1’, bottleneck, [(256, 64, 1)] * 2 + [(256, 64,
2)]),block1是Block名称(或scope),bottleneck是ResNet
V2残不一上单元。最后参数是Block
args,args是列表,每个元素对应bottleneck残差学习单元。前面两只元素(256,
64, 1),第三要素(256, 64,
2),每个元素还是三元tuple(depth,depth_bottleneck,stride)。(256, 64,
3)代表bottleneck残差学习单元(三独卷积层),第三重合输出通道数depth
256,前片交汇输出通道数depth_bottleneck 64,中间层步长stride
3。残差学习单元结构[(1×1/s1,64),(3×3/s3,64),(1×1/s1,256)]。

跌采样subsample方法,参数inputs(输入)、factor(采样因子)、scope。fator1,不做修改直接回inputsx,不呢1,用slim.max_pool2d最充分池化实现。1×1池化尺寸,stride步长,实现降低采样。

降采样subsample方法,参数inputs(输入)、factor(采样因子)、scope。fator1,不举行修改直接归inputsx,不为1,用slim.max_pool2d最充分池化实现。1×1池化尺寸,stride步长,实现退采样。

定义conv2d_same函数创建卷积层,如果stride为1,用slim.conv2d,padding模式SAME。stride不为1,显式pad
zero。pad zero总数kernel_size-1
pad_beg为pad//2,pad_end也富余产有。tf.pad补零输入变量。已经zero
padding,只待padding模式VALID的slim.conv2d创立是卷积层。

定义conv2d_same函数创建卷积层,如果stride为1,用slim.conv2d,padding模式SAME。stride不呢1,显式pad
zero。pad zero总数kernel_size-1
pad_beg为pad//2,pad_end也富余生一些。tf.pad补零输入变量。已经zero
padding,只待padding模式VALID的slim.conv2d创建是卷积层。

概念堆叠Blocks函数,参数net输入,blocks是Block class
列表。outputs_collections收集各end_points
collections。两重叠循环,逐个Block,逐个Residual
Unit堆叠。用少单tf.variable_scope命名残差上单元block/unit_1形式。第2层循环,每个Block每个Residual
Unit
args,展开depth、depth_bottleneck、stride。unit_fn残差学习单元生成函数,顺序创建连接有残差学习单元。slim.utils.collect_named_outputs函数,输出net添加至collection。所有Block所有Residual
Unit堆叠完,返回最后net作stack_blocks_dense函数结果。

概念堆叠Blocks函数,参数net输入,blocks是Block class
列表。outputs_collections收集各end_points
collections。两叠循环,逐个Block,逐个Residual
Unit堆叠。用简单个tf.variable_scope命名残差上单元block/unit_1形式。第2层循环,每个Block每个Residual
Unit
args,展开depth、depth_bottleneck、stride。unit_fn残差学习单元生成函数,顺序创建连接有残差学习单元。slim.utils.collect_named_outputs函数,输出net添加到collection。所有Block所有Residual
Unit堆叠完,返回最后net作stack_blocks_dense函数结果。

创建ResNet通用arg_scope,定义函数参数默认值。定义训练标记is_training默认True,权重衰减速度weight_decay默认0.001。BN衰减速率默认0.997,BN
epsilon默认1e-5,BN
scale默认True。先安装好BN各项参数,通过slim.arg_scope设置slim.conv2d默认参数,权重正则器设L2正则,权重初始化器设slim.variance_scaling_initializer(),激活函数设ReLU,标准化器设BN。最特别池化padding模式默认设SAME(论文被之所以VALID),特征对合重简便易行。多叠嵌套arg_scope作结果回到。

创建ResNet通用arg_scope,定义函数参数默认值。定义训练标记is_training默认True,权重衰减速度weight_decay默认0.001。BN衰减速率默认0.997,BN
epsilon默认1e-5,BN
scale默认True。先安装好BN各项参数,通过slim.arg_scope设置slim.conv2d默认参数,权重正则器设L2正则,权重初始化器设slim.variance_scaling_initializer(),激活函数设ReLU,标准化器设BN。最酷池化padding模式默认设SAME(论文中因故VALID),特征对共同重简单。多重合嵌套arg_scope作结果回到。

概念核心bottleneck残差学习单元。ResNet V2论文Full Preactivation Residual
Unit 变种。每层前都用Batch
Normalization,输入preactivation,不在卷积进行激活函数处理。参数,inputs输入,depth、depth_bottleneck、stride,outputs_collections收集end_points
collection,scope是unit名称。用slim.utils.last_dimension函数获取输入最后维度输出通道数,参数min_rank=4限定最少4个维度。slim.batch_norm
输入 Batch Normalization,用ReLU函数预激活Preactivate。

概念核心bottleneck残差学习单元。ResNet V2论文Full Preactivation Residual
Unit 变种。每层前还用Batch
Normalization,输入preactivation,不在卷积进行激活函数处理。参数,inputs输入,depth、depth_bottleneck、stride,outputs_collections收集end_points
collection,scope是unit名称。用slim.utils.last_dimension函数获取输入最后维度输出通道数,参数min_rank=4限定最少4单维度。slim.batch_norm
输入 Batch Normalization,用ReLU函数预激活Preactivate。

定义shorcut,直连x,如果残差单元输入通道数depth_in、输出通道数depth一致,用subsample,步长stride,inputs空间降采样,确保空间尺寸以及残差一致,残差中间层卷积步长stride;如果非雷同,用步长stride
1×1卷积改变通道数,变一致。

定义shorcut,直连x,如果残差单元输入通道数depth_in、输出通道数depth一致,用subsample,步长stride,inputs空间降采样,确保空间尺寸以及残差一致,残差中间层卷积步长stride;如果未等同,用步长stride
1×1窝积改变通道数,变一致。

定义residual(残差),3重叠,1×1尺码、步长1、出口通道数depth_bottleneck卷积,3×3尺寸、步长stride、输出通道数depth_bottleneck卷积,1×1尺寸、步长1、输出通道数depth卷积,得最终residual,最后层没有正则项无激活函数。residual、shorcut相加,得最终结果output,用slim.utils.collect_named_outputs,结果上加collection,返回output函数结果。

定义residual(残差),3层,1×1尺码、步长1、出口通道数depth_bottleneck卷积,3×3尺寸、步长stride、输出通道数depth_bottleneck卷积,1×1尺寸、步长1、出口通道数depth卷积,得最后residual,最后层没有正则项尚未激活函数。residual、shorcut相加,得最后结果output,用slim.utils.collect_named_outputs,结果上加collection,返回output函数结果。

概念生成ResNet
V2主函数。参数,inputs输入,blocks为Block类列表,num_classes最后输出类数,global_pool标志是否加最后一层全局平均池化,include_root_block标志是否加ResNet网络太前方7×7卷积、最可怜池化,reuse标志是否用,scope整个网络称。定义variable_scope、end_points_collection,通过slim.arg_scope设slim.con2d、bottleneck、stack_block_dense函数的参数outputs_collections默认end_points_colletion。根据include_root_block标记,创建ResNet最前64输出通道步长2的7×7窝积,接步长2的3×3极度老池化。两个涨幅2层,图片尺寸缩小为1/4。用stack_blocks_dense生成残差上模块组,根据标记添加全局平均池化层,用tf.reduce_mean实现全局平均池化,效率比较直接avg_pool高。根据是否来分类数,添加输出通道num_classes1x1窝积(无激活函数无巧则项),添加Softmax层输出网络结果。用slim.utils.convert_to_dict
转化collection为Python dict。最后回来net、end_points。

概念生成ResNet
V2主函数。参数,inputs输入,blocks为Block类列表,num_classes最后输出类数,global_pool标志是否加最后一重叠全局平均池化,include_root_block标志是否加ResNet网络最前头7×7卷积、最老池化,reuse标志是否用,scope整个网络称。定义variable_scope、end_points_collection,通过slim.arg_scope设slim.con2d、bottleneck、stack_block_dense函数的参数outputs_collections默认end_points_colletion。根据include_root_block标记,创建ResNet最前头64输出通道步长2的7×7卷积,接步长2的3×3太老池化。两独增幅2层,图片尺寸缩小为1/4。用stack_blocks_dense生成残差上模块组,根据标记添加全局平均池化层,用tf.reduce_mean实现全局平均池化,效率比直接avg_pool高。根据是否发生分类数,添加输出通道num_classes1x1卷积(无激活函数无巧则项),添加Softmax层输出网络结果。用slim.utils.convert_to_dict
转化collection为Python dict。最后回来net、end_points。

50叠ResNet,4独残差学习Blocks,units数量为3、4、6、3,总层数(3+4+6+3)x3+2=50。残差学习模块前,卷积、池化把尺寸缩小4加倍,前3只Blocks包含步长2层,总尺寸缩小4×8=32倍。输入图片尺寸最后移224/32=7。ResNet不断用步长2层缩减尺寸,输出通道数持续增加,达到2048。

50重合ResNet,4只残差学习Blocks,units数量为3、4、6、3,总层数(3+4+6+3)x3+2=50。残差学习模块前,卷积、池化把尺寸缩小4加倍,前3只Blocks包含步长2层,总尺寸缩小4×8=32倍。输入图片尺寸最后移224/32=7。ResNet不断用步长2层缩减尺寸,输出通道数持续增加,达到2048。

152层ResNet,第二Block units数8,第三Block units数36。

152层ResNet,第二Block units数8,第三Block units数36。

200层ResNet,第二Block units数23,第三Block units数36。

200层ResNet,第二Block units数23,第三Block units数36。

评测函数time_tensorflow_run测试152层ResNet
forward性能。图片尺寸224×224,batch size 32。is_training
FLAG设False。resnet_v2_152创办网络,time_tensorflow_run评测forward性能。耗时长50%,实用卷积神经网络结构,支持过杀网训练,实际工业使用forward性能不殊。

评测函数time_tensorflow_run测试152层ResNet
forward性能。图片尺寸224×224,batch size 32。is_training
FLAG设False。resnet_v2_152创造网络,time_tensorflow_run评测forward性能。耗时长50%,实用卷积神经网络结构,支持逾酷网训练,实际工业应用forward性能不例外。

参考资料:
《TensorFlow实战》

参考资料:
《TensorFlow实战》

欢迎付费咨询(150首届各个小时),我的微信:qingxingfengzi

接付费咨询(150头版各个小时),我的微信:qingxingfengzi

相关文章

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图