当前位置:网站首页 > 编程语言 > 正文

预训练权重(预训练权重是什么)



        迁移学习在计算机视觉领域中是一种很流行的方法,因为它可以建立精确的模型,耗时更短。利用迁移学习,不是从零开始学习,而是从之前解决各种问题时学到的模式开始。这样,我们就可以利用以前的学习成果。

        在计算机视觉领域中,迁移学习通常是通过使用预训练模型来表示的。预训练模型是在大型基准数据集上训练的模型,用于解决相似的问题。由于训练这种模型的计算成本较高,因此,导入已发布的成果并使用相应的模型是比较常见的做法。例如,在目标检测任务中,首先要利用主干神经网络进行特征提取,这里使用的backbone一般就是VGG、ResNet等神经网络,因此在训练一个目标检测模型时,可以使用这些神经网络的预训练权重来将backbone的参数初始化,这样在一开始就能提取到比较有效的特征。

        PyTorch提供了state_dict()和load_state_dict()两个方法用来保存和加载模型参数,前者将模型参数保存为字典形式,后者将字典形式的模型参数载入到模型当中

示例:

我们先定义一个模型(省略)

获得当前模型的参数

获取预训练的模型

这里要注意,torch.load()得到的结果并不一定就是模型,也可以是模型参数或者其他储存模型信息的字典,这里一定要据情况而论。

所以一般来说要看读取的文件是什么,如果以.pth结尾就是模型。如果是其他形式那么可以用字典映射来获取想要的信息,比如这里我们获取模型参数。

获取完预训练模型参数后,如果要将这个模型参数加载进我们的模型要使用load_state_dict()方法。

而要注意load_state_dict()方法要求加载的模型参数键值类型和当前模型完全一致,所以在载入的过程中需要匹配。

在我们得到当前模型参数model_dict和预训练模型参数pre_model.state_dict()后,

接下来将temp更新到我们的模型参数里

# 这里我在debug的时候发现如果不把model_dict的数据类型改为dict会发生字典键值对无法更新的情况,我觉得可能是模型参数的数据类型是OrderedDict,和temp不一样

冻结训练很简单,只需要调整对应层的requires_grad属性就行了

这里将当前模型除了最后的全连接层外所有层权重冻结,仅训练最后的全连接层

# 这里还要注意要把优化器调整一下,只保留模型中可训练的层。

到此这篇预训练权重(预训练权重是什么)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • linux文件目录重命名命令(linux 文件目录重命名)2025-04-03 07:36:07
  • 程序员快速入门(程序员快速入门方法)2025-04-03 07:36:07
  • 程序员入门技巧有哪些(程序员入门技巧有哪些书籍)2025-04-03 07:36:07
  • windows 虚拟机下载(手机版windows虚拟机下载)2025-04-03 07:36:07
  • bt151怎么接(bta16接线图)2025-04-03 07:36:07
  • win7u盘启动盘制作工具(win7系统u盘启动盘制作)2025-04-03 07:36:07
  • awvs免费版(awvs免费版现在还敢用吗)2025-04-03 07:36:07
  • ubuntu安装yum源的方法(ubuntu安装thonny)2025-04-03 07:36:07
  • 如何在win11上安装win7虚拟机(win10虚拟机安装win11)2025-04-03 07:36:07
  • 头的解剖结构分层图解(头的解剖图骨头)2025-04-03 07:36:07
  • 全屏图片