(Review cs231n) ConvNet
概念
神经网络的深度和数据据体的深度(图像的通道数channels)要主要区分。
输入
1.得到一些数据,作为网络的输入。
2.在CNN中有filter,the size of filter is small。如上的filter为5*5,深度为3,这个3要在深度上穿过
输入数据的每一个位置,输入数据是三个通道;
3.filter 要完全覆盖输入数据的全部深度,用filter来和输入图像做卷积运算。
filter要在整个图像的空域范围内全部位置滑动,每一个位置filter和图像做点乘。这个filter是要学习的用W表示,我们也要学习这些filter,可以把filter看作是你的一堆W,然后在图像范围内滑动这个filter。
as folllows:
$w^{T}x + b$
where w denotes the filter and x denotes the patch of input image, 大小是5*5*3的小区域。
激活图给出了每个空间位置出滤波器的反应,将5*5的filter在32*32的输入数据上滑动,得到了28*28的激活图。
hei = ;
wid = ;
stride = ;
count = ;
step1 = ;
step2 = ;
pathchSize = ;
for x = + step1: stride : hei - patchSize +
for y = + step2 : stride : wid - patchSize +
count = count + ;
end
end out >>> count = >>> *
另一个滤波器与第一次滤波器计算无关,所以的滤波器都是相互独立的,假设有六个filter,然后输入数据每一个独立的计算与六个滤波器点乘,这个过程成为卷积运算,得到了一组28*28*6的激活图组,把他们沿着深度方向存储在一起。
操作:遍历这幅图像,重新表示这幅32*32的图像,表示为了28*28*6,又作为了后续层的输入,后一个filter为5*5*6(为了保持了输入的深度一致),假设有10个独立的filter做线性运算
感性的认识这些操作的意义
CNN最后会构建整个特征层级
随着网络的加深,组合成更大的特征块,用小的特征块组合在一起。所以初始值随机,空间上组合这个特征。
filters的堆叠
将滤波器产生的激活图沿着深度方向组合起来,然后把这些图作为下一个卷积层的输入,也就是不断的做这些图的组合。
Conv的大体布局
从图中可以看到大概为三个部分:
1. 卷积层 2.Relu层 (非线性变换层,进行阈值处理也是控制过拟合的方式) 3. 池化层pooling
一列中的每一行是一个激活图,每一个卷积层有10个滤波器
filter的不同尺寸和步长(stride)对于得到的激活图的尺寸
1.计算可以取多少个patch的公式:
hei = ?;
wid = ?;
stride = ?;
count = ;
step1 = ;
step2 = ;
pathchSize = ?;
for x = + step1: stride : hei - patchSize +
for y = + step2 : stride : wid - patchSize +
count = count + ;
end
end
2.计算输出的激活图的尺寸
$Result = (N-F)/Stride + 1$
where Result should be integer.
3.常用图像的填充(pad)
1.填充的默认值为0;
2.如果加上一圈边缘之后再做卷积,输出尺寸和输入尺寸一样大,这是我们想要的结果,这对于设计神经网络架构十分好,空间大小不变的性质。
3.对于3*3的滤波器,需要1圈才能保持空间大小不变,对于广义的F的大小,如何使空间大小不变呢?需要考虑填充的大小:
4.使用5*5的filter 会发现图像尺寸会随着时间的推进而变小,这是个不好的性质,尺寸从32-》28-》24,空间尺寸变小的速度非常快,我们不想让我们的图像尺寸减小的太快,我们希望做很大大小不会缩小的卷积层,用更少的数字表现原来的图像;希望表达的尺寸不变。
5.参数的计算
6.卷积层的总结:每次接收到的输入数据尺寸为W1*H2*D1,输出尺寸为W2*H2*D2;卷积层的四个超参数:
(1)K 是filter的数量(也表示卷积后的深度,总是2的指数,e,g,32 64 128 512,因为有时候会进入特殊的高效的计算流程,使用向量化表示,这是使用2的指数的原因)
(2)空间的延生F:经常3*3 S=1 空间尺寸不变、或者5*5 S=2 空间尺寸不变;filter的尺寸总是奇数,奇数尺寸的filter有更好的表达,3是有意义的最小尺寸了。
(3)步长S
(4)zero-padding的数量P
7.特例:1*1的卷积,每个滤波器在整个深度方向上做点乘,在整个深度方向上做64维的点乘,再做阈值化处理,有意义。
8.输入深度取决于你的图像通道,输出深度取决于你有多少个滤波器,比较重要的两个词:共享参数和局域连接;也就是说神经元在一个激活映射中共享相同的权值, 我们有5个不同的滤波器,结果从整体上观察数据,你有排列在3维空间中的神经元体,全部以一个局域模式,共享参数的状态关注着同一个数据体。
但是在深度方向上,它们都有不同的神经元,都有着输入数据体的相同的部分,它们的权重不同,它们各自和自己相同层的小伙伴分享权重。
局域连接和参数共享的优点是可以从视觉上控制模型能力,神经元在平面上想要计算相似的东西,例如小的边缘,这样的功能有意义。
下采样
空间尺寸的减小通常是在下采样层进行的。
直观概念:下采样层就是把输入数据拿过来,通过下采样达到空间上压缩的目的,下采样在每个激活映射中独立进行,as follows:
1.max pooling(效果最好的)
需要知道的下采样的超参数包括: 步长、filter的尺寸,深度保持不变。
全连接层(FC layer)
AlexNet
注意池化层没有参数,只有卷积层才有参数。
当在进行反向传播时一定要小心,因为参数是共享的,当你在用filter做卷积时,所有神经元都共享参数,你必须小心所有filter的梯度都汇总到一个权重
blob,
ZFNet
VGGNet
在filter的大小等参数上做了很多的工作,整个VGG网络只用了3*3卷积核,滑动步长2和2*2的池化窗口,stride为2。
大多数的memory的消耗在前面的卷积部分,而大多数的参数集中在全连接层。
GooLeNet
使用了平均池化,在全连接层前大幅度的减小了参数的规模
Resnet
plain net 随着层数的增长反而错误率降低;按道理来说随着层数的增长,模型的性能应该更好,但是结果却是更坏。我们在优化层数上做的不够好
但是ResNet相反,当你提升层数时,模型的训练错误率和测试错误率上都持续地改进,所以你想用更多层数。
梯度“流经”这些权重并且后向传播,你需要做的是加法处理,加法在这里是分散梯度给所有的两部分,因此梯度会流向之前的一部分,同样也会跳过
这一部分,之间流向输入处,该结构让你的梯度直接从158层的softmax层跳达这里的卷积层,因此你可以训练处离图像很近的这些小层次。中间的这些家伙能够
能够学习到如何加入你的信号使得更有效。
另一种解释是这一层基本上是由默认的恒等运算,这些建立在顶部的恒等上,它只是让它更好的优化。
Resnet的训练
(需要再看下Xavier/2的初始化方法)BN可以使得学习率高一些;
残差网络快速缩减了这个尺寸,它们打包了所有的大小,以便内存存下来更多的层次。
(Review cs231n) ConvNet的更多相关文章
- (Review cs231n) CNN in Practice
Make the most of your data Data augmentation 加载图像后,对图像做一些变化,这些变换不改变图像的标签. 通过各种变换人为的增大数据集,可以避免过拟合提高模型 ...
- (Review cs231n) Object Detection
目标:我们有几个类别,然后我们要在这张图中找到这些类的所有实例 解决思路:是否可以按照回归的思路进行求解呢? 但是受限制于确定的种类输出问题. 方法:分类和回归是解决问题的两个套路,我们现在对于目标的 ...
- (Review cs231n) Spatial Localization and Detection(classification and localization)
重在图像的定位和检测的内容. 一张图片中只有一种给定类别标签的对象,定位则是图像中有对象框:再这些类中,每一个训练目标都有一个类和许多的图像内部对应类的位置选框. 猜想的仅是类标签,不如说它们是位置 ...
- (Review cs231n) Training of Neural Network2
FFDNet---matlab 调用并批处理 format compact; global sigmas; % input noise level or input noise level map a ...
- (Review cs231n) Optimized Methods
Mini-batch SGD的步骤: 1.Sample a batch of data 2.Forward prop it through the graph,get loss 3.backprop ...
- (Review cs231n) BN and Activation Function
CNN网络的迁移学习(transfer learning) 1.在ImageNet上进行网络的预训练 2.将最上方的层,即分类器移除,然后将整个神经网络看成是固定特征提取器来训练,将这个特征提取器置于 ...
- (Review cs231n) The Gradient Calculation of Neural Network
前言:牵扯到较多的数学问题 原始的评分函数: 两层神经网络,经过一个激活函数: 如图所示,中间隐藏层的个数的各数为超参数: 和SVM,一个单独的线性分类器需要处理不同朝向的汽车,但是它并不能处理不同颜 ...
- (Review cs231n) Gradient Vectorized
注意: 1.每次更新,都要进行一次完整的forward和backward,想要进行更新,需要梯度,所以你需要前馈样本,马上反向求导,得到梯度,然后根据求得的梯度进行权值微调,完成权值更新. 2.前馈得 ...
- (Review cs231n) Gradient Calculation and Backward
---恢复内容开始--- 昨日之补充web. 求解下图的梯度的流动,反向更新参数的过程,表示为 输入与损失梯度的关系,借助链式法则,当前输入与损失之间的梯度关系为局部梯度乘以后一层的梯度. ---恢复 ...
随机推荐
- linux windows安装python的最佳方式,miniconda
1.在linux安装python文章很多,但是步骤很多,没搞好还会把yum命令弄坏,要修复.这件事就发生在我身上,准确说不是我造成的,是总监自己安装python造成yum损坏的,然后需要运维去百度修改 ...
- Thread类的join()方法
public class Demo { /** * Thread类的join()方法 * -------------------------------- * 1)join() * 2)join(lo ...
- ES6 扩展运算符 三点(...)
含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...
- login流程
DirServer增加,修改-后台网页操作 维护所有分区的当前信息创建,修改,上报分区信息分区:状态,版本号,注册量等 一.loginserver定时从dir同步所有区服的信息 登陆相关 1.CmdI ...
- C#Windows Service服务程序的安装/卸载、启动/停止 桌面客户端管理程序设计
C#Windows Service服务程序的安装/卸载.启动/停止 桌面客户端管理程序设计 关于Windows Service程序的安装与卸载如果每次使用命令行操作,那简直要奔溃了,太麻烦而且还容易出 ...
- 将VSCode添加到右键
https://www.cnblogs.com/Rexcnblog/p/8046371.html https://www.jianshu.com/p/b49002fa10a7 @echo Off :S ...
- 解决 nginx 出现 413 Request Entity Too Large 的问题
1.若nginx用所用的 php 请求解析服务是 fpm, 则检查 /etc/php5/fpm/php.ini 文件中的参数 upload_max_filesize = 20M post_max_si ...
- git clean(转载)
git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以 ...
- Scala 中方法扩展实践
前言 这个名字不知道取得是否合适,简单来说要干的事情就是给某个类型添加一些扩展方法,此场景在各种语言中都会用到,比如 C# 语言,如果我们使用一个别人写好的类库,而又想给某个类库添加一些自己封装的方法 ...
- Solve Error: Library not loaded: @rpath/RoutingHTTPServer.framework/RoutingHTTPServer
在配置WebDriverAgent的时候,可能会遇到如下的错误: 2018-01-04 09:53:42.759370-0600 WebDriverAgentRunner-Runner[318:133 ...