ubuntu之路——day6(今天对数据集的建立有了更深的体会)
两个重点:
一.举个例子,如果建立一个图像识别的数据集,你的训练集和你的训练验证集是从网上爬下来的(也就是说这些图片的大小、像素、后期制作都可能很精美),你真正的测试集是用户的手机上传(不同的手机、环境、光线、时间等等会造成不同的效果)
这两个集合必定不是同分布的,虽然在transfer learning中我们鼓励这种研究方式,但是在单个模型的训练中,不管你的模型建立的多么好,从这个数据集建立开始的那一刻起就注定了你的结果不会很好。所以,在建立自己的数据集时,必须保证同分布的条件,当然这很困难,但是建立一个好的数据集将有助于提升你算法最终的效果。
我在进行植物图片分类时,就自己从网上找了一些图片,结果证明分类效果很差,这有时并不是因为模型的问题。而是因为这些图片取自真正的自然情况,可能在一张图片中包含多种植物,甚至可能有些图片是单株植物,有些图片是成群的,还有一些图片包含了水系和天空,甚至有些图片可能还有人工景色如亭台楼阁等。干扰太大,从像素到时间到光线到取景,从建立数据集的那一刻起就注定了实验的失败。
那么如何才能建立一个标准化的数据集呢?我们都知道可以从各种大赛还有官方的数据集网站上下载数据集,但是当你自己做一种应用场景的实验或者是论文的时候,如果不单单是改进算法,避免数据集的重复就很重要。毕竟phd阶段的算法改进必须放在标准数据集下与它人的结果进行比较,但是master degree下的应用场景就使得你不得不想法设法的建立自己的应用环境(也就是自己的数据集)
打个比方,当你对植物进行分类的时候,最好的方法其实是,不要对自然场景下的植物直接进行分类,对植物的叶片或者果实进行提取,然后找到一个标准的背景板,比如一张A4白纸,在最中心的地方摆放各种植物的叶片或者是果实之类的提取物,使用同一台相机,在相同的位置进行拍摄,重复这一过程,这就叫标准数据集的建立。
二.对数据集的划分不应该train/test,更加标准的做法是train/dev/test,前者必定导致过拟合(如果有人管自己的训练验证集叫测试集,然后宣称自己从算法上改进了过拟合,保持警惕他很有可能是胡说八道)
按照我以往进行的机器学习实验来看,我们通常都是把数据集data set划分为训练集train和测试集test两个集合进行实验,比如十次十折交叉验证,就是一个原始数据集划分十等份,然后每次拿其中的一份出来做测试,然后做十次求一个均值。
但是真正好的做法是划分三个集合:train+Dev+test
顾名思义 dev即development也就是验证集,训练集+验证集其本质就是我们以往划分的交叉验证法的两个集合,与此同时必须划分出一个独立的没有被训练时引入的集合作为真正的测试集test
这样的好处是保证了无偏性能评估,因为如果在训练的时候引入了测试集,过拟合是必定会出现而且理论上无法避免的
如果有人没有划分独立的真正的test date set,那么在查看这种结果时应当报以警惕,显然地这种测试必定是过拟合的。
ubuntu之路——day6(今天对数据集的建立有了更深的体会)的更多相关文章
- (转)Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- 在Ubuntu内制作自己的VOC数据集
一.VOC数据集的简介 PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板.现在有VOC2007,VOC2012.主要有20个类.而现在主要的模型评估 ...
- Python之路,Day6 - Python基础6
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- Python之路Day6
Day6的主要内容是: configparser模块 shutil模块 subprocess模块 处理xml的模块 1.configparser模块 #! /usr/bin/env python # ...
- 转:Python之路,Day6 - 面向对象学习
这篇文章写的不错,转来收了 转自:http://www.cnblogs.com/alex3714/articles/5188179.html 本节内容: 面向对象编程介绍 为什么要用面向对象进 ...
- 十一Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战& ...
- python的学习之路day6
大纲: 1.反射 其中的方法:getattr,delattr,setattr,hasattr __import__() __import__() 注意事项 2.模块中的特殊变量 __doc__ __c ...
- ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充
开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...
- ubuntu之路——day11.7 end-to-end deep learning
在传统的数据处理系统或学习系统中,有一些工作需要多个步骤进行,但是端到端的学习就是用一个神经网络来代替中间所有的过程. 举个例子,在语音识别中: X(Audio)----------MFCC----- ...
随机推荐
- npm 安装卸载模块 & ionic插件安装与卸载
npm安装模块 npm install xxx利用 npm 安装xxx模块到当前命令行所在目录 npm install -g xxx利用npm安装全局模块xxx 本地安装时将模块写入package.j ...
- MySQL Hardware--RAID卡常用信息查看
MegaRAID信息查看 #查raid卡信息(生产商.电池信息及所支持的raid级别) /usr/local/sbin/MegaCli -AdpAllInfo -aALL |grep -E " ...
- Python——数据类型公用功能
1.索引 表示从哪里开始取值. 支持类型 str 列表 dict 不支持类型 int bool a= '1234567' print(a[1:])#指从哪开始读取,1为从1号元素开始.默认为0 pri ...
- 【CMDB】高级配置
思路: 一份默认配置,一份用户自定义配置,将两者结合,自定义优先级大于默认配置 目录结构 ''' 用户自定义的配置文件,settings.py ''' USER = 'xiaoming' PASSWO ...
- Flink原理(四)——任务及调度
本文是博主阅读官网文档.博客及书籍后自己所思所得,若是存在有误的地方,欢迎留言分享,谢谢! 一.任务调度 Flink是通过task slot的来定义执行资源的,为优化资源的利用率,Flink通过slo ...
- 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)
https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面 ...
- pod-test
apiVersion: v1 kind: Pod metadata: name: init-demo # 命名空间 namespace: default labels: app ...
- Vue中mapMutations映射方法的问题
今天又被自己给蠢到,找了半天没发现问题.大家看下代码. mutation-types.js 里我新增了一个类型.INIT_CURRENTORDER export const GET_USERINFO ...
- Fiddler——如何抓取PHP的curl请求
前言 本文主要介绍如何使用fiddler工具,来进行抓取PHP的curl请求,如果你会使用fiddler,那就是一行代码的事, 不会也没事,本文会教你如何简单的使用. 步骤 代码 设置桥接网络为127 ...
- 详解C++中基类与派生类的转换以及虚基类
很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中 ...