Keras入门-预训练模型fine-tune(ResNet)

这篇博客介绍了如何利用Keras进行预训练模型ResNet50的fine-tuning,以适应小数据集的分类任务。主要步骤包括下载ResNet50权重,构建网络结构,加载预训练参数,调整全连接层,以及选择性地解冻部分层进行训练,防止过拟合。具体操作包括下载不包含全连接层的模型参数文件,定义并编译模型,以及针对特定任务调整网络。
摘要由CSDN通过智能技术生成

在深度学习的学习过程中,由于计算资源有限或者训练集较小,但我们又想获得较好较稳定的结果,那么一些已经训练好的模型会对我们有很大帮助,比如 Alex Net, google net, VGG net, ResNet等,那我们怎么对这些已经训练好的模型进行fine-tune来提高准确率呢? 在这篇博客中,我们使用已经训练好的ResNet50网络模型,该模型基于imagenet数据集,实现了对1000种物体的分类。

步骤如下:

   1. 下载ResNet50不包含全连接层的模型参数到本地(resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5);

            2. 定义好ResNet50的网络结构;

            3. 将预训练的模型参数加载到我们所定义的网络结构中;

            4. 更改全连接层结构,便于对我们的分类任务进行处

            5. 或者根据需要解冻最后几个block,然后以很低的学习率开始训练。我们只选择最后一个block进行训练,是因为训练样本很少,而ResNet50模型层数很多,全部训练肯                 定不能训练好,会过拟合。 其次fine-tune时由于是在一个已经训练好的模型上进行的,故权值更新应该是一个小范围的,以免破坏预训练好的特征。


Step1:下载权重数据

地址:点击这里


Step2:定义ResNet50的网络结构

def identity_block(X, f, filters, stage, block):
    # defining name basis
    conv_name_base = 'res' + str(stage) + block + '_branch'
    bn_name_base = 'bn' + str(stage) + block + '_branch'
    
    # Retrieve Filters
    F1, F2, F3 = filters
    
    # Save the input value. You'll need this later to add back to t
  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值