第1章 1.4 PyTorch中的预训练模型_第1页
第1章 1.4 PyTorch中的预训练模型_第2页
第1章 1.4 PyTorch中的预训练模型_第3页
第1章 1.4 PyTorch中的预训练模型_第4页
第1章 1.4 PyTorch中的预训练模型_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PyTorch中的预训练模型PyTorch库中包含了多种常用的网络结构,并且提供了预训练模型。预训练模型可以帮助使用者快速实现模型的建立,可以减少深度学习建模的工作量。PyTorch中的预训练模型1预训练模型的使用场景目录预训练模型的概念2PyTorch预训练模型的调用方法3预训练模型是一个在大型数据集(通常是大型图像分类任务)中完成训练并已保存模型,预训练模型的使用,即将预训练模型的权重加载到新的模型。相较于使用随机初始化权重的模型,使用了预训练模型权重的模型得到结果的速度更快,但是两者得到的结果并不会有太大的差距。对于希望应用某个现有框架来解决自己任务的人而言,由于时间限制或硬件水平限制,往往并不会选择从零开始训练一个新模型。而是使用预训练模型作为基准来改进现有模型,从而快速实现模型的建立,这也是预训练模型存在的意义。预训练模型的概念一个预训练模型对于需要解决的问题并不是100%的准确对接,但可以节省大量时间。在一个属于图像分类的手机图片分辨项目上,训练数据集中有四千多张图片,测试集中有1200张图片,项目任务是将图片分到16个类别中。如果采用一个简单的多层感知机(Multi-laterPerceptron,MLP)模型,在对输入图片(尺寸为224×224×3)平整化后,训练模型所得结果的准确率只有百分之六左右。即便尝试对隐藏层的神经元数量和丢弃率进行调整,准确率都没有显著提高。如果采用卷积神经网络,训练结果表明准确率有了显著的提高,可以达到原来的两倍以上,但距离分类最低的标准还是太远。如果采用在ImageNet数据集上预先训练好的模型VGG16,在VGG16结构的基础上,将softmax层的神经元个数从1000改为16,从而适应16分类的问题,模型在手机图片分辨项目上的准确率可以达到70%。同时,使用预训练模型VGG16最大的好处是大大减少了训练的时间,只需要对全连接层进行训练。预训练模型的概念1预训练模型的使用场景目录预训练模型的概念2PyTorch预训练模型的调用方法3在大型数据集上训练模型,并将模型的结构和权重应用到目前所面对的问题上,即将预训练模型“迁移”到正在面对的特定问题上。在解决目前面对的问题的时候需要匹配好对应的预训练模型,如果问题与预训练模型训练情景有很大不同,那么模型所得到的预测结果会非常不理想。例如,把一个原本用于语音识别的模型用作用户识别,只能得到非常差的结果。ImageNet数据集已经被广泛用作计算机视觉领域的训练集,因为数据规模足够大(120万张图片),有助于训练一般模型,ImageNet数据集的训练目标是将所有的图片准确划分到1000个分类条目下。数据集的1000个分类来源于日常生活,如动物类、家庭生活用品、交通工具等。使用ImageNet数据集训练的网络对于数据集外的图片也表现出很好的泛化能力。预训练模型的使用场景在预训练模型的使用过程中,不会过多地修改预训练模型中的权重,而是对权重进行微调(finetune)。例如,在修改模型的过程中,通常会采用比一般训练模型更低的学习率。在预训练模型的使用中,常见的用法有以下3种。将预训练模型中的输出层去掉,保留剩下的网络层作为待训练网络的特征提取层。保留预处理模型的网络结构,并初始化预训练模型的全部权重。然后重新训练网络得到新的模型权重。冻结预训练模型中前k个层的权重,重新训练后面的层,得到新的权重。预训练模型的使用场景不同场景中预训练模型的具体应用如下。场景一:数据集规模小,数据相似度高。在这种场景下,因为数据与训练模型的训练数据相似度很高,因此不需要重新训练模型,只需要对输出层进行修改即可。例如,手机图片分辨场景中提到的16分类问题,只需将输出从1000个类别改为16个类别。场景二:数据集规模小,数据相似度不高。在这种场景下,可以冻结预训练模型中的前k个层中的权重,然后重新训练后面的n-k个层,n为网络的总层数。同时输出层也需要根据相应的输出格式进行修改。预训练模型的使用场景场景三:数据集规模大,数据相似度不高。在这种场景下,因为实际数据与预训练模型的训练数据之间存在很大差异,采用预训练模型将不会是一种高效的方式。最好的方法是将预训练模型中的权重全都初始化后在新数据集的基础上重新开始训练。场景四:数据集规模大,数据相似度高。在这种理想场景下,最好的方式是保持模型原有的结构和权重不变。随后在新数据集的基础上重新训练。预训练模型的使用场景1预训练模型的使用场景目录预训练模型的概念2PyTorch预训练模型的调用方法3PyTorch的torchvision库的models包中包含AlexNet、DenseNet、Inception、ResNet、Squeezenet、VGG(VGG16和VGG19)等常用网络结构。并且提供了预训练模型,可通过调用包的方式读取网络结构和预训练模型(模型参数)。ResNet主要有5种变形:ResNet50、Res101、Res152、ResNet50V2、Res101V2、Res152V2。每个网络都包括3个主要部分:输入部分、输出部分和中间卷积部分。尽管ResNet变种形式丰富,但是都有着相似的结构,网络之间的不同主要在于中间卷积部分的参数和个数存在差异。以ResNet50为例,展示常见的2种预训练模型加载方法,具体如下。加载网络结构和预训练参数的代码“resnet50=models.resnet50(pretrained=True)”。只加载网络结构,不加载预训练模型参数的代码“resnet50=models.resnet50(pretrained=False)”。PyTorch预训练模型的调用方法加载ResNet50预训练模型,并对模型的参数进行修改。ResNet50网络的源代码在Github中可以查看。ResNet50网络的输出层的out_features参数为1000,该参数可以根据待训练的数据集中的类别数进行修改。例如,在某种图像的分类项目中,共包含了9种类别标签,即可将该参数修改为9。代码展示的方法只适用于简单的参数修改,有时候受数据结构的影响,需要修改网络中的层次结构。这时可以使用“迁移”的方法,即先定义一个类似的网络,再将预训练中的参数提取到自定义的网络中。预训练模型的使用并非千篇一律,主要是由数据集大小和新旧数据集之间数据的相似度来决定。PyTorch预训练模型的调用方法本章主要围绕深

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论