学习笔记TF033

2019-09-18 04:53栏目:最大平台
TAG:

ResNet(Residual Neural Network),微软商讨院 Kaiming He等4名中中原人民共和国人建议。通过Residual Unit陶冶152层深神经互联网,ILSVRC 二〇一四比赛季军,3.60%top-5错误率,参数量比VGGNet低,效果特别卓绝。ResNet结构,相当慢加快超深神经互连网陶冶,模型正确率相当大进步。英斯ption V4,英斯ption Module、ResNet结合。ResNet推广性好。

瑞十教师Schmidhuber(LSTM网络发明者,一九九八年)建议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,非常多旁路支线,输入直接连到后层,后层直接攻读残差,shortcut或connections。直接将输入新闻绕道传到输出,保护音讯完整性,整个互连网只学习输入、输出差异,简化学习目的、难度。

两层残新式学习单元蕴涵三个相同输出通道数3x3卷积。三层残差网络用Network In Network和英斯ption Net 1x1卷积。在中间3x3卷积前后都用1x1卷积,先降维再升维。倘诺输入输出维度差异,对输入x线性映射调换维度,再接后层。

layername outputsize 18-layer 34-layer 50-layer 101-layer 152-layer
conv1 112x112 7x7,64,stride 2
conv2_x 56x56 3x3 max pool,stride 2
3x3,64x2 3x3,64x3 1x1,64x3 1x1,64x3 1x1,64x3
3x3,64 3x3,64 3x3,64 3x3,64 3x3,64
1x1,256 1x1,256 1x1,256
conv3_x 28x28 3x3,128x2 3x3,128x4 1x1,128x4 1x1,128x4 1x1,128x8
3x3,128 3x3,128 3x3,128 3x3,128 3x3,128
1x1,512 1x1,512 1x1,512
conv4_x 14x14 3x3,256x2 3x3,256x6 1x1,256x6 1x1,256x23 1x1,256x36
3x3,256 3x3,256 3x3,256 3x3,256 3x3,256
1x1,1024 1x1,1024 1x1,1024
conv5_x 7x7 3x3,512x2 3x3,512x3 1x1,512x3 1x1,512x3 1x1,512x3
3x3,512 3x3,512 3x3,512 3x3,512 3x3,512
1x1,2048 1x1,2048 1x1,2048
1x1 average pool,1000-d fc,softmax
FLOPs 1.8x10^9 3.6x10^9 3.8x10^9 7.6x10^9 11.3x10^9

ResNet结构,化解层数不断加重陶冶集引用误差增大现象。ResNet网络练习抽样误差随层数增大逐步减小,测试集表现变好。谷歌(Google)借鉴ResNet,提议英斯ption V4和英斯ption-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等价奥德赛NN,ResNet类似多层互联网间集成方法(ensemble)。

《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。残差学习单元结构[(1x1/s1,64),(3x3/s3,64),(1x1/s1,256)]。

降采集样品subsample方法,参数inputs(输入)、factor(采集样品因子)、scope。fator1,不做修改直接重回inputsx,不为1,用slim.max_pool2d最大池化达成。1x1池化尺寸,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创造此卷积层。

概念积聚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作结果重回。

概念宗旨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 1x1卷积退换通道数,变一致。

定义residual(残差),3层,1x1尺码、步长1、出口通道数depth_bottleneck卷积,3x3尺寸、步长stride、输出通道数depth_bottleneck卷积,1x1尺寸、步长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网络最前头7x7卷积、最大池化,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的7x7卷积,接步长2的3x3最大池化。四个上升的幅度2层,图片尺寸减弱为54%。用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层,总尺寸缩短4x8=32倍。输入图片尺寸最终变224/32=7。ResNet不断用步长2层缩减尺寸,输出通道数持续加码,到达2048。

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

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

评测函数time_最大平台,tensorflow_run测验152层ResNet forward性能。图片尺寸224x224,batch size 32。is_training FLAG设False。resnet_v2_152创办网络,time_tensorflow_run评测forward品质。耗费时间扩展八分之四,实用卷积神经互连网布局,辅助超深互连网练习,实际工业使用forward品质不差。

参考资料:
《TensorFlow实战》

接待付费咨询(150元每小时),我的微信:qingxingfengzi

版权声明:本文由澳门萄京官网最大平台发布于最大平台,转载请注明出处:学习笔记TF033