lesson7cnn architecture-fastai
课程https://v.qq.com/x/page/e0398lijt8h.html
讲解:
http://www.sohu.com/a/144583206_697750
resnet可以看作VGG16来使用,Resnet50中50表示容量,是resNet中最小的容量了
resNet不是被设计用来和大量的标准密集层一起使用的,而是和global average pooling层一起使用的。
最初的resnet是在imagenet中训练的,vgg就是卷积-》激活-》卷积。。,resnet就是有relu在上面的卷积层
resNet Block:和vgg的区别,vgg的卷积-》batch normalization-》激活。。+identity部分,最后是merge(x,input_tensor)
resNet优点:(1)可以建立更深层次的网络,在对权重进行反向传播计算时,在identity中进行反向传播时很容易的,不会出现梯度爆炸或者激活值爆炸
t+1时刻的隐藏激活值-t时刻的。。=t时刻resNet block作用于隐藏层的值
--》对残差建模
resnet的结构本质类似boosting,即拥有大量的对误差进行预测的模型
global average pooling:resnet中不需要dropout的原因是使用了~,而使用~使得模型中参数大大减少,NIN 中采用global average pooling ,而不是使用 fc 层,减少了网络参数。例如,假如,最后的一层的数据是10个6*6的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,
这样10 个特征图就会输出10个数据点,将这些数据点组成一个1*10的向量的话,就成为一个特征向量,就可以送入到softmax的分类中计算了
99%以上的工作都是需要迁移学习的,如果不适用,就意味着你的数据集和别人的大不相同,以至于没有一个模型中的特征是对你有一点帮助的。几乎所有的迁移学习都用vgg,vgg是被设计成来建立逐渐复杂的层的。
data leakage:建立模型和ML中常见,原因是将与目标结果直接相关的特征纳入了数据集,但是那个信息要不无法使用,要不在实际生活中根本不起任何作用。
http://www.mamicode.com/info-detail-1799605.html --- 渔场的那个比赛
---》
微调的意义:因为我们只有数千张训练样本,而深度网络的参数非常多,这就意味着训练图片的数量要远远小于参数搜索的空间,因此,如果只是随机初始化深度网络然后用这数千张图片进行训练,非常容易产生“过拟合”(Overfitting)的现象。为了解决这样的问题,我们一般都会使用那些已经在数百万甚至上千万上训练好的网络参数作为初始化参数,可以想象这样一组参数的网络已经“看过”了大量的图片,因此泛化能力大大提高了,提取出来的视觉特征也更加的鲁棒和有效。
我们将微调的范围扩大至更多的卷积层。不过事实上,我们会认为位置相对靠前的卷积层提取出来的特征更加的底层和具有通用性,而位置相对靠后的卷积层以及全连接层更加与数据集的相关性大一些,因此有时候我们并不会微调前几个卷积层。
技巧1:同一个模型,平均多个测试样例
这个技巧指的是,当我们训练好某个模型后,对于某张测试图片,我们可以使用类似数据扩增的技巧生成与改张图片相类似的多张图片,并把这些图片送进我们训练好的网络中去预测,我们取那些投票数最高的类别为最终的结果。Github仓库中的predict_average_augmentation.py实现的就是这个想法,其效果也非常明显。
技巧2:交叉验证训练多个模型
还记得我们之前说到要把三千多张图片分为训练集和验证集吗?这种划分其实有很多种。一种常见的划分是打乱图片的顺序,把所有的图片平均分为K份,那么我们就可以有K种<训练集,验证集>的组合,即每次取1份作为验证集,剩余的K-1份作为训练集。因此,我们总共可以训练K个模型,那么对于每张测试图片,我们就可以把它送入K个模型中去预测,最后选投票数最高的类别作为预测的最终结果。我们把这种方式成为“K折交叉验证”(K-Fold Cross-Validation)。图9表示的就是一种5折交叉验证的数据划分方式。
-->如果能找出某条鱼来自那条船
--》统计不同大小图片的个数~不同大小的鱼是什么类型 32min
-->比赛的目的是找出神马时候非法捕捞了,或者捕捉了错误的类型的鱼,所以找出那家渔船捕捉的鱼是没有意义的,即data leakage现象
--》如何利用leakage?:merge([x,bn_inp])参数二是图像的大小,且已经对图像的大小进行过独热编码,因为他们现在是被当作类别来利用的;现在这个模型能做的是它最后一层dense layer能够学习将图片特征和元数据结合起来~同样也可以用于协同过滤
官方避免leakage的做法是:类似分层抽样,要求每条船上的鱼的数量和类型都要一致等
--》在每一个项目种,自己都应该思考如何复制没有leakage的现实条件
fisheries比赛的一个输入信息是图像的经过独热编码的大小,把它假设为对船只身份的代理
---》手动给鱼画上“边界盒”
---》去掉包围盒后,我们的loss更加稳定
关心图片输入大小的只有dense layer,因为conv的卷积核大小是不变的,pooling是没有的权重的,batch normalization的只与上一层权重有关
---》构建全卷积神经网络
---》代码修改~我们可以使用不同的大小,如果使用了不同的大小,就不要使用全连接层~当size不为224*224时,删掉最后的dense layer,这样我们可以在任意大小的输入内容上利用这个结构来建立那些卷积特征
---》对输入的size不需要固定,但是对于dense layer,他的权重矩阵是固定的,而且通常权重矩阵的输入就是经过flatten的上一层的卷积层,而它的大小取决于图片的大小;而卷积权重的大小取决于过滤器的大小,而不是图片的大小
---》640*360的图片对应的矩阵是360*640,最后一个2Dconv的输出是(8,5,5),即最终分类数为8
why用cnn代替所有的dense layers?:
(1)实践证明去掉dense layer,使用globalaveragepooling很有效,具有普遍化特征
(2)conv可以帮着我们找到目标位置
在热图上视觉化网络层
---》提高热图的解析度~删除所有的maxpooling(将分辨率的x、y都降低了一半)
---》找有鱼和找没有鱼的图片的热度图相反,一个是蓝色包围着有鱼的位置的红色,一个是红色包围着些蓝色
---》粉红色并不是代表鱼的位置,热图只是告诉我我们的模型目前不是在寻找鱼,而是在寻找船的特性,那么这里存在一定程度的leakage
Inception结构:和reanet的组合,搭建最小的~
---》即拥有不同大小的卷积过滤器,运行所有的过滤器然后连接起来,就是Inception网络所进行的操作
---》如何匹配鱼头和鱼尾 --手动注释
---》手动注释+分离鱼的方法相结合
---》类似resnet中的resnet block,inception网络中有一直重复的inception blcok~不同conv大小~block能够找寻不同范围的内容然后建立一个把这些内容都加起来的一张最后的特征图
---》keras中有resnet\inception网络直接下载和使用
通过识别鱼的类型来找到鱼的位置
scan:使用scan来对每一个序列循环调用函数~theano使用了tree的方式
lesson7cnn architecture-fastai的更多相关文章
- Undefined symbols for architecture arm64解决方案
在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64,这个错误表示工程某些地方不支持arm64指令集.那我们应该怎么解决这个问题了?我们不 ...
- Optimal Flexible Architecture(最优灵活架构)
来自:Oracle® Database Installation Guide 12_c_ Release 1 (12.1) for Linux Oracle base目录命名规范: /pm/s/u 例 ...
- EF框架组件详述【Entity Framework Architecture】(EF基础系列篇3)
我们来看看EF的框架设计吧: The following figure shows the overall architecture of the Entity Framework. Let us n ...
- [Architecture] 系统架构正交分解法
[Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大 ...
- Stack Overflow: The Architecture - 2016 Edition
To get an idea of what all of this stuff “does,” let me start off with an update on the average day ...
- ios build时,Undefined symbols for architecture xxx问题的总结
简单来说,Undefined symbols基本上等于JAVA的ClassNotFoundException,最常见的原因有这几种: build的时候没有加framework 比如说,有一段代码我用了 ...
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel", referenced from: objc-class-ref in The49DayPersonalRoomGiftModel.o ld: symbol(s) not found for a
Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel&q ...
- ios开发错误之: Undefined symbols for architecture x86_64
错误如下: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_RoutingHTTPServer", refere ...
- util-linux编译unknown architecture 'BSD_LABELSECTOR' undeclared错误
------------------------------------------------------------------------------ In :: fdiskbsdlabel.h ...
- 解决duplicate symbols for architecture x86_64错误
duplicate symbols for architecture x86_64 两个不第三方SDK之间的文件里面内容重复了,类似 file.h+file.m 和 CHfile.h+CHfile.m ...
随机推荐
- sql中,如何获取一个数的整数部分和余数部分
我们测试一下,我要得到的结果是多少周(整数),多少天(余数) 1.获取指定日期到当前日期之间的天数 首先用DATEDIFF() 函数获取指定日期到当前日期的天数 --获取指定日期到当前日期的天数 se ...
- Java Web(一) 前言及体系结构
Web应用程序 Web程序是什么 Web应用程序就是一般所说的网站,由服务器,客户端浏览器以及网络组成.但Web程序又不是一般意义的网站,一般的网站是提供信息服务,重在内容,程序往往比较简单,但商用的 ...
- python 自然语言处理(三)____条件频率分布
条件频率分布就是频率分布的集合,每个频率分布有一个不同的“条件”,这个条件通常是文本的类别.当语料文本分为几类(文体,主题,作者等)时,可以计算每个类别独立的频率分布,这样,就可以通过条件频率分布研究 ...
- 数据库-->记录操作
一.概览 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现 ...
- 《Python》网络编程基础
计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...
- VSTO:使用C#开发Excel、Word【9】
文件背后的代码VSTO支持文档背后的代码,要求开发人员使用VSTO项目中生成的具有预连接上下文和预连接事件的类.这些类有时被称为“代码后面”类,因为它们是与特定文档或工作表相关联的代码.在Word中, ...
- Docker常用命令学习
sudo service docker startsudo docker run hello-worlddocker stats --helpdocker run -d -P training/web ...
- 循环神经网络-极其详细的推导BPTT
首先明确一下,本文需要对RNN有一定的了解,而且本文只针对标准的网络结构,旨在彻底搞清楚反向传播和BPTT. 反向传播形象描述 什么是反向传播?传播的是什么?传播的是误差,根据误差进行调整. 举个例子 ...
- el-container 实践上的布局问题
当自己利用element-ui上面的例子来实现整体布局的时候, 就是自己分开成单独的vue组件时,发现布局是不对的,效果是这样的: 代码是这样的,代码一模一样,只是拆开了各个组件,如下图: 后来发现是 ...
- 记一次给nginx的web服务器目录加软链接
先期情况和问题 已安装好nginx服务器和相关配置.nginx的web目录是/usr/share/nginx/html. 现在的问题是希望把web目录换成/root/nginx/html/,但是不更改 ...