本文主要内容如题:

在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式

具体的pytorch官方讨论:

https://github.com/pytorch/vision/pull/782

===================================================

原文最初的讨论是数据预训练是否在模型训练的时候显示的给出:

回答是:

由于数据预处理步骤与训练数据集相关而不是与模型相关,所以官方将模型的预训练的步骤写在了torchvision中的dataset部分。

但是这个讨论最为有信息量的回答是:

从这个回答中我们知道两个点,

第一点:

那就是torchvision中的数据预处理虽然写在了torchvision中的dataset里面,但是实际上 googlenet and inceptionV3 这两个模型的数据预处理是与其他模型不同的。其他模型的数据预处理方式中有正则化操作:

但是,googlenet and inceptionV3 ,并不进行数据显示的正则化操作。

第二点:

The normalisation is not independent of the model if you are using transfer learning. Not using imagenet normalisation (by default) while using imagenet pretrained weights will lead to slower convergence of the model as the models are expecting the images to come from the distribution having mean and std as that of imagenet on which it was thoroughly trained.

数据预处理虽然和模型无关只和数据集有关,但是如果使用的是预训练模型参数那么数据的预处理方式也很重要,因为在迁移学习的时候迁移后的模型还是更适用于采用了原始预处理方式的数据,不然的话会减慢模型的收敛。迁移后的模型还是期望获得原始数据(预训练的数据集)分布的数据(相同的均值和方差)。

==================================================

Yes, I have a source. Please have a look at the inceptionV3 (here) and googlenet (here) implementation.

googlenet 网络模型的数据处理方式:

https://github.com/pytorch/vision/blob/9d9f48a3b483771ad0ed50ed871c1677edef6d2a/torchvision/models/googlenet.py#L81-L85

inception  网络模型的数据处理方式:

https://github.com/pytorch/vision/blob/9d9f48a3b483771ad0ed50ed871c1677edef6d2a/torchvision/models/inception.py#L76-L80

可以看到,这两个网络其实是不进行数据预处理的,因为为了保证数据集中数据预处理的统一性所以在dataset中所有模型均进行了数据正则化操作,但是实际这两个模型不需要数据正则化所以在模型定义中这两个模型又进行了逆正则化操作,也就是将dataset中的数据正则化进行消除。

====================================================

通过该文知道了torchvision 中googlenet 和 inception 网络数据预处理的不同于其他模型,同时也知道了在模型迁移时我们是有必要知道预训练参数的训练数据的预处理操作的,如果预训练时候对数据进行了正则化那么迁移后也是需要对新数据进行同样的正则化,不然就会损失掉模型的收敛性。

=========================================

在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式的更多相关文章

  1. PyTorch保存模型与加载模型+Finetune预训练模型使用

    Pytorch 保存模型与加载模型 PyTorch之保存加载模型 参数初始化参 数的初始化其实就是对参数赋值.而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了da ...

  2. pytorch加载预训练模型参数的方式

    1.直接使用默认程序里的下载方式,往往比较慢: 2.通过修改源代码,使得模型加载已经下载好的参数,修改地方如下: 通过查找自己代码里所调用网络的类,使用pycharm自带的函数查找功能(ctrl+鼠标 ...

  3. 【小白学PyTorch】5 torchvision预训练模型与数据集全览

    文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...

  4. pytorch预训练模型的下载地址以及解决下载速度慢的方法

    https://github.com/pytorch/vision/tree/master/torchvision/models 几乎所有的常用预训练模型都在这里面 总结下各种模型的下载地址: 1 R ...

  5. Pytorch——BERT 预训练模型及文本分类

    BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义.本次试验将介绍 BERT 的模型结构,以及将其应用于文 ...

  6. ubuntu之路——day3(本来打算做pytorch的练习 但是想到前段时间的数据预处理的可视化分析 就先总结一下)

    首先依托于一个场景来进行可视化分析 直接选了天池大数据竞赛的新人赛的一个活跃题目 用的方式也是最常用的数据预处理方式 [新人赛]快来一起挖掘幸福感!https://tianchi.aliyun.com ...

  7. 修改pytorch官方实例适用于自己的二分类迁移学习项目

    本demo从pytorch官方的迁移学习示例修改而来,增加了以下功能: 根据AUC来迭代最优参数: 五折交叉验证: 输出验证集错误分类图片: 输出分类报告并保存AUC结果图片. import os i ...

  8. Note | PyTorch官方教程学习笔记

    目录 1. 快速入门PYTORCH 1.1. 什么是PyTorch 1.1.1. 基础概念 1.1.2. 与NumPy之间的桥梁 1.2. Autograd: Automatic Differenti ...

  9. 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

    文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...

  10. PyTorch官方中文文档:torch.nn

    torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...

随机推荐

  1. SonarQube代码质量扫描工具

    1.什么是SonarQube 既然是学习devops 运维流水线构建 开发 ↓ 测试 ↓ 运维 华为devops软件开发流水线文档 https://support.huaweicloud.com/re ...

  2. django通过channels实现websocket

    WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...

  3. 1004 成绩排名 PAT Basic Level

    我的个人博客地址 azoux's blog 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 ...

  4. spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配置错误

    spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来.检查是否服务注册配置错误 解决方法: 去掉该配置eureka.instance.hostname = client微服务的 ...

  5. java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $

    java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $ pack ...

  6. 开源一个反sql注入的asp.net core中间件

    现在公安有一个专门负责信息安全的部门,前几天公司就收到了一个整改通知,防sql注入的整改. 我们公司开始对网站进行了简单的测试,普通的sql都能检测出来. 但还是被发了整改通知,肯定有些sql注入的方 ...

  7. python logging日志没有写入到指定文件,写到其他项目的日志文件

    背景: 项目A为主框架项目,使用到了项目B的方法 项目A.B均有封装好的日志方法,且均在封装好的日志文件里面,增加了logger = MyLogger().info,其他文件要使用日志时,引入logg ...

  8. JAVA-poi导出excel到http响应流

    导出结果为excel是相对常见的业务需求,大部分情况下只需要导出简单的格式即可,所以有许多可以采用的方案.有些方案还是很容易实现的. 一.可用的解决方案 目前可以有几类解决方案: 字处理企业提供的解决 ...

  9. arm linux 移植 ffmpeg 库 + x264 + x265

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

  10. Spark3学习【基于Java】5. Spark-Sql联表查询JOIN

    大数据场景下,联表远比微小型关系型数据库中使用的频繁.网上有句话: 传统数据库单机模式做Join的场景毕竟有限,也建议尽量减少使用Join. 然而大数据领域就完全不同,Join是标配,OLAP业务根本 ...