在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式
本文主要内容如题:
在使用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 网络模型的数据处理方式:

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

可以看到,这两个网络其实是不进行数据预处理的,因为为了保证数据集中数据预处理的统一性所以在dataset中所有模型均进行了数据正则化操作,但是实际这两个模型不需要数据正则化所以在模型定义中这两个模型又进行了逆正则化操作,也就是将dataset中的数据正则化进行消除。
====================================================
通过该文知道了torchvision 中googlenet 和 inception 网络数据预处理的不同于其他模型,同时也知道了在模型迁移时我们是有必要知道预训练参数的训练数据的预处理操作的,如果预训练时候对数据进行了正则化那么迁移后也是需要对新数据进行同样的正则化,不然就会损失掉模型的收敛性。
=========================================
在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式的更多相关文章
- PyTorch保存模型与加载模型+Finetune预训练模型使用
Pytorch 保存模型与加载模型 PyTorch之保存加载模型 参数初始化参 数的初始化其实就是对参数赋值.而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了da ...
- pytorch加载预训练模型参数的方式
1.直接使用默认程序里的下载方式,往往比较慢: 2.通过修改源代码,使得模型加载已经下载好的参数,修改地方如下: 通过查找自己代码里所调用网络的类,使用pycharm自带的函数查找功能(ctrl+鼠标 ...
- 【小白学PyTorch】5 torchvision预训练模型与数据集全览
文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...
- pytorch预训练模型的下载地址以及解决下载速度慢的方法
https://github.com/pytorch/vision/tree/master/torchvision/models 几乎所有的常用预训练模型都在这里面 总结下各种模型的下载地址: 1 R ...
- Pytorch——BERT 预训练模型及文本分类
BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义.本次试验将介绍 BERT 的模型结构,以及将其应用于文 ...
- ubuntu之路——day3(本来打算做pytorch的练习 但是想到前段时间的数据预处理的可视化分析 就先总结一下)
首先依托于一个场景来进行可视化分析 直接选了天池大数据竞赛的新人赛的一个活跃题目 用的方式也是最常用的数据预处理方式 [新人赛]快来一起挖掘幸福感!https://tianchi.aliyun.com ...
- 修改pytorch官方实例适用于自己的二分类迁移学习项目
本demo从pytorch官方的迁移学习示例修改而来,增加了以下功能: 根据AUC来迭代最优参数: 五折交叉验证: 输出验证集错误分类图片: 输出分类报告并保存AUC结果图片. import os i ...
- Note | PyTorch官方教程学习笔记
目录 1. 快速入门PYTORCH 1.1. 什么是PyTorch 1.1.1. 基础概念 1.1.2. 与NumPy之间的桥梁 1.2. Autograd: Automatic Differenti ...
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...
- PyTorch官方中文文档:torch.nn
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...
随机推荐
- Kubernetes监控手册06-监控APIServer
写在前面 如果是用的公有云托管的 Kubernetes 集群,控制面的组件都交由云厂商托管的,那作为客户的我们就省事了,基本不用操心 APIServer 的运维.个人也推荐使用云厂商这个服务,毕竟 K ...
- Redis数据类型有哪些?
a.String(字符串) b.Hash(hash表) c.List(链表) d.Set(集合) e.SortedSet(有序集合zset)
- 使用spark-sql处理Doris大表关联
背景 最近项目上有一个需求,需要将两张表(A表和B表)的数据进行关联并回写入其中一张表(A表),两张表都是分区表,但是关联条件不包括分区字段. 分析过程 方案一 最朴素的想法,直接关联执行,全表关联, ...
- java.sql.SQLException: Connection is read-only. Queries leading to data modification are not
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not 产生的原因:事 ...
- mybatis insert foreach批量添加
mybatis insert foreach批量添加 int insertSelectiveBatch(List<ImageDetailEntity> myList); //写法1 < ...
- Lucene demo演示搜索查询歌手,歌名,歌词
1.导入pom jar文件 <dependency> <groupId>org.apache.lucene</groupId> <artifactId> ...
- 洛谷 P5595 歌唱比赛
题目链接:歌唱比赛 思路 根据题目分析可得,假如小x的点赞数是123111,小y的点赞数是234111,则字符串的第4为到第6位结果都为Z,分别为对比(111,111),(11,11),(1,1),字 ...
- 带有ttl的Lru在Rust中的实现及源码解析
TTL是Time To Live的缩写,通常意味着元素的生存时间是多长. 应用场景 数据库:在redis中我们最常见的就是缓存我们的数据元素,但是我们又不想其保留太长的时间,因为数据时间越长污染的可能 ...
- Swoole v6 能否让 PHP 再次伟大?
大家好,我是码农先森. 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求.而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信 ...
- 一个难忘的json反序列化问题
前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助. 案发现场 我最近在做知识星球中的商品秒杀系统,写 ...