cs231n spring 2017 lecture5 Convolutional Neural Networks听课笔记
1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签。
在Convolution Layer里,图像保持原样,依旧是32*32*3,把它和一个5*5*3的filter进行卷积运算(filter和原图像有相同的通道数,比如这里都是3)。这里的“卷积”并不是严格按照信号处理里先把图像翻转,这里只是对应像素乘积累加,可以按照fully connected layer的写法,把5*5*3的filter展开成75*1,原图像也抠出同样大小的一块并展开成一维,然后线性运算wTx+b。如此运算后,最终得到28*28*1的结果(32-5+1=28),名字叫activation map。每一个filter实际代表一种特征,通过卷积查看原图的各个局部位置与这个特征的匹配程度。实际处理中会用好多个不同的filter,如果用了6个,则得到28*28*6的“新图像”。卷积是线性运算,所以之后还要再跟一个非线性的激活函数(比如ReLU)。几个卷积层之后,还会再用一个POOL(池化层:池化层的输入一般来源于上一个卷积层,主要作用是增强鲁棒性,并且减少了参数的数量,防止过拟合现象的发生)。
卷积神经网络实际就是一系列的类似卷积层的堆叠。从底层到高层的卷积层对应的特征越来越复杂。
2. 上一部分的卷积过程是每次平移一个像素(stride=1),可以移动几个像素,最终输出大小是(N-F)/stride+1,这里假设图像是N*N,filter是F*F。输出大小必须是整数,如果不是的话,stride就不能取这个数。
还有两个问题:1)每次卷积会缩小图片,对于卷积层很多的深度学习网络,图片会很快缩的非常小。2)丢失了边缘信息。为了解决这个问题,实际操作中,会在图像周边补0,这时候输出大小是(N+2*P-F)/stride+1,这里P是两边各补的0的个数。
总结一下:
输入图片大小是W1*H1*D1。
Hyperparameters:1)filter的数量K,一般取2的指数个,比如32,64,128,512。
2)filter的大小F,一般取1,3,5。(边长为1的filter是有意义的,因为这相当于是对每个像素的各个通道加权求和。)
3)步长stride S,一般取1,2。stride有降低图片分辨率的作用,或者说降采样。
4)单边补零的个数P。
输出图片大小是W2*H2*D2:
1)W2=(W1-F+2P)/S+1.
2)H2=(H1-F+2P)/S+1.
3)D2=K。
一共F*F*D1*K个权重参数,K个bias参数。
3. Pooling Layer:对图片降采样。
最常用的是Max pooling:降采样时取一个小区域里的最大值。可以这么直观理解,比如我们想在一个小区域里找某个特征,这个小区域内任何一处的值很高,都代表我们在这个小区域找到了这个特征,所以用它来表征这个区域。
卷积过程的步长stride大于1和pooling都是为了降采样,二者并不是必须有的,根据实际问题调整架构。
总结一下:
输入图片大小是W1*H1*D1。
Hyperparameters:1)pooling的大小F,一般取2,3。
2)步长stride S,一般取2。
输出图片大小是W2*H2*D2:
1)W2=(W1-F)/S+1.
2)H2=(H1-F)/S+1.
3)D2=D1。
不引入新的参数,并且一般不会补0。
cs231n spring 2017 lecture5 Convolutional Neural Networks听课笔记的更多相关文章
- cs231n spring 2017 lecture10 Recurrent Neural Networks 听课笔记
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture5 Convolutional Neural Networks
1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...
- cs231n spring 2017 lecture8 Deep Learning Networks 听课笔记
1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...
- cs231n spring 2017 lecture10 Recurrent Neural Networks
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture12 Visualizing and Understanding 听课笔记
这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...
- cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...
- cs231n spring 2017 lecture6 Training Neural Networks I 听课笔记
1. 激活函数: 1)Sigmoid,σ(x)=1/(1+e-x).把输出压缩在(0,1)之间.几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法 ...
- cs231n spring 2017 lecture7 Training Neural Networks II
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...
- cs231n spring 2017 lecture6 Training Neural Networks I
1. 激活函数: 1)Sigmoid,σ(x)=1/(1+e-x).把输出压缩在(0,1)之间.几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法 ...
随机推荐
- Chef 自动化运维:开始“烹饪”
在 Chef Workstation 上创建了一个 cookbook 之后,我们执行以下命令来进行测试: chef-client --local-mode --override-runlist fir ...
- iOS知识点、面试题 之三
最近面试,发现这些题 还不错,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cn ...
- 小白的Python之路 day4 装饰器高潮
首先装饰器实现的条件: 高阶函数+嵌套函数 =>装饰器 1.首先,我们先定义一个高级函数,去装饰test1函数,得不到我们想要的操作方式 import time #定义高阶函数 def deco ...
- JavaWeb之原生数据库连接
我们在开发JavaWeb项目时,常会需要连接数据库.我们以MySQL数据库为例,IDE工具为eclipse,讲述数据库连接与基本操作. 第一步,我们在Web项目的WebContent中建一个简单的前端 ...
- 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...
- intelij Android 搭建 java 项目
1.打开ide创建页面,点击创建项目 2.选择Android,发现下面有一段红字,解释很清楚,由于第一使用为设置Android的开发环境sdk,去设置一下就好,点击取消回到上一界面 3 配置 4.当然 ...
- python的属性(property)使用
在面向对象编程的时候,我们定义一个Person类 class Person: def __init__(self): self.age = 22 这样写法能够方便的访问属性age, p = Perso ...
- xamarin Android activity生命周期详解
学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...
- SQL企业级面试题
链接:90root MySQL企业面试题 1. 开发有一堆数据插入,如何防止插入的中文数据产生乱码? 2. 如何批量更改数据库表的引擎,如:myisam改为innodb 3. 如何批量更改数据库字符集 ...
- struts2 使用filter解决中文乱码问题
1.编写fliter的代码 import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChai ...