从零搭建 resnet18 并使用cifar100数据集测试

本文基于Deep Residual Learning for Image Recognition的最小层次18层搭建

本模型由于引入了残差(Residual)的概念(我更愿意把他看作为shortcut)使得网络层数加深不会导致更坏的结果,使得网络可以多层堆叠而不会更坏

由于网络过深设备算不过来,故只搭建18层

 

注意:博主目前还不会任何数据优化手段,只是对元数据进行了-1,1映射,请自行叠加骚操作

前置准备

python3.6

tensorflow-gpu

cuda kit

cudnn

 

前置技能

cnn

bpnn

batchnormalization

padding pooling sample

 

模型关键

可以看到shortcut的加入我们的网络最多只会退化到x输入时的layer depth。

假设网络输出h(x) 由图有 h(x)=f(x)+x ,则我们要的结果是f(x) ,所以f(x)==h(x)-x,所以我们对f(x)进行优化,使得f(x)与ground true的loss收敛,这里我们用 cross entropy来评估loss。对loss求导获得更新值,剩下的其实就和cnn没啥区别了。

模型整体框架

我们可以看到在最后还有一大坨full dense connect,那是用来分类的,cifar100不是一百分类问题嘛。不过由于参数量过大我们选择降低层数。

代码实现

首先我先给大家展示一下参数量,否则各位gpu可能mmp

看到没有 可训练的参数高达1千万,当然也可以使用混合精度训练,或者直接fp16半精度训练,但本文不用。

模型关键是一个网络的basic block 多个相同的堆叠 会变成 resnet block,多个resnet block堆叠就差不多是一个resnet了。

注意,不同resnet block的kernel size相同,感知野也相同,但随着层次变深channel会增加,变成高维度数据

 

basic block

class BasicBlock(layers.Layer):

    def __init__(self, kernel_num,stride=1):
        super(
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值