Task 05 打卡

卷积神经网络

二维卷积层

?维卷积层将输?和卷积核做互相关运算,并加上?个标量偏差来得到输出。卷积层的模型参数包括了卷积核和标量偏差。在训练模型的时候,通常我们先对卷积核随机初始化,然后不断迭代卷积核和偏差。

二维互相关运算(cross-correlation)

互相关运算和卷积运算

为了得到卷积运算的输出,我们只需将核数组左右翻转并上下翻转,再与输?数组做互相关运算。可?,卷积运算和互相关运算虽然类似,但如果它们使?相同的核数组,对于同?个输?,输出往往并不相同。

特征图和感受野

?维卷积层输出的?维数组可以看作是输?在空间维度(宽和?)上某?级的表征,也叫特征图(feature map)。影响元素\(x\)的前向计算的所有可能输?区域(可能?于输?的实际尺?)叫做\(x\)的感受野(receptive field)

填充和步幅

输入\(n_h \times n_w\), 卷积核窗口\(k_h \times k_w\), 输出形状为\((n_h - k_h +1) \times (n_w -k_w +1)\)

填充(padding)

填充(padding)是指在输??和宽的两侧填充元素(通常是0元素)。

这时输出行状变为:\((n_h - k_h +p_h +1) \times (n_w -k_w +p_w+1)\)

在很多情况下,我们会设置\(p_h =k_h-1\)和\(p_w=k_w-1\)来使输?和输出具有相同的?和宽。这样会?
便在构造?络时推测每个层的输出形状

步幅(stride)

我们将每次滑动的?数和列数称为步幅(stride)。

多输入通道

当输?数据含多个通道时,我们需要构造?个输?通道数与输?数据的通道数相同的卷积核,从而能够与含多通道的输?数据做互相关运算。 \(c_i \times n_h \times n_w\), \(c_i\)为通道数。

计算时,每个通道上有相应的卷积核,进行互相关运算后相加

多输出通道

为\(c_o\)个输出通道都创建类似于多输入通道的卷积核组,卷积核变为\(c_o \times c_i \times k_h \times k_w\)

==\(1\times1\)==卷积核不改变输出大小,但可用在通道数量的改变上

池化

池化(pooling)层,能够缓解卷积层对位置的过度敏感性。池化也是在固定形状的窗口中对所有元素进行计算输出,但池化层直接计算池化窗口内元素的最?值或者平均值。

卷积层的padding 和stride 都可应用于池化层

但在多通道情况下,池化层会针对每一个通道进行池化,所以池化不会改变通道数量。

卷积与多层感知机相比的优势:???,卷积层保留输?形状,使图像的像素在?和宽两个?向上的相关性均可能被有效识别;另???,卷积层通过滑动窗口将同?卷积核与不同位置的输?重复计算,从而避免参数尺?过?

LeNet模型

LeNet展示了通过梯度下降训练卷积神经.络可以达到.写数字识别在当时最先进的结果。

C1层:该层是一个卷积层。使用6个大小为55的卷积核对输入层进行卷积运算,特征图尺寸为32-5+1=28,因此产生6个大小为2828的特征图。这么做够防止原图像输入的信息掉到卷积核边界之外。

S2层:该层是一个池化层(pooling,也称为下采样层)。这里采用max_pool(最大池化),池化的size定为2*2,经池化后得到6个14*14的特征图,作为下一层神经元的输入。

C3层:该层仍为一个卷积层,我们选用大小为55的16种不同的卷积核。这里需要注意:C3中的每个特征图,都是S2中的所有6个或其中几个特征图进行加权组合得到的。输出为16个1010的特征图。

S4层:该层仍为一个池化层,size为22,仍采用max_pool。最后输出16个55的特征图,神经元个数也减少至1655=400。

C5层:该层我们继续用55的卷积核对S4层的输出进行卷积,卷积核数量增加至120。这样C5层的输出图片大小为5-5+1=1。最终输出120个11的特征图。这里实际上是与S4全连接了,但仍将其标为卷积层,原因是如果LeNet-5的输入图片尺寸变大,其他保持不变,那该层特征图的维数也会大于1*1。

F6层:该层与C5层全连接,激活函数sigmoid,输出84张特征图。为什么是84?下面有论文的解释

输出层:该层与F6层全连接,输出长度为10的张量,代表所抽取的特征属于哪个类别。(例如[0,0,0,1,0,0,0,0,0,0]的张量,1在index=3的位置,故该张量代表的图片属于第三类)

此处为论文对F6层和输出层的解释:

输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。

使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。

以上搬运自知乎

AlexNet

==第?==,与相对较小的LeNet相?,AlexNet包含8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。下?我们来详细描述这些层的设计。AlexNet第?层中的卷积窗口形状是11 \(\times\) 11。因为ImageNet中绝?多数图像的?和宽均?MNIST图像的?和宽?10倍以上,ImageNet图像的物体占?更多的像素,所以需要更?的卷积窗口来捕获物体。第?层中的卷积窗口形状减小到5$\times\(5,之后全采?3\)\times\(3。此外,第?、第?和第五个卷积层之后都使?了窗口形状为3\)\times$3、步幅为2的最?池化层。而且,AlexNet使?的卷积通道数也?于LeNet中的卷积通道数数?倍。紧接着最后?个卷积层的是两个输出个数为4096的全连接层。

==第?==,AlexNet将sigmoid激活函数改成了更加简单的ReLU激活函数。???,ReLU激活函数的计算更简单,例如它并没有sigmoid激活函数中的求幂运算。另???,ReLU激活函数在不同的参数初始化?法下使模型更容易训练。这是由于当sigmoid激活函数输出极接近0或1时,这些区域的梯度?乎为0,从而造成反向传播?法继续更新部分模型参数;而ReLU激活函数在正区间的梯度恒为1。因此,若模型参数初始化不当,sigmoid函数可能在正区间得到?乎为0的梯度,从而令模型?法得到有效训练。
==第三==,AlexNet通过丢弃法来控制全连接层的模型复杂度。而LeNet并没有使?丢弃法。
==第四==,AlexNet引?了?量的图像增?,如翻转、裁剪和颜?变化,从而进?步扩?数据集来缓解过拟合。

VGG

VGG块连续使?数个相同的填充为1、窗口形状为3 \(\times\) 3的卷积层后接上?个步幅为2、窗口形状为2 $\times$2的最?池化层。卷积层保持输?的?和宽不变,而池化层则对其减半。

VGG通过串联多个VGG块进行实现

NiN

NiN使?1$\times\(1卷积层来替代全连接层,从而使空间信息能够?然传递到后?的层中去。NiN块由一个可以一定义超参数的卷积层和两个固定参数的1\)\times$1卷积层串联构成。

下图比较了AlexNet和VGG的?络结构局部,NiN的?络结构局部

NiN去掉了AlexNet最后的3个全连接层,取而代之地,NiN使?了输出通道数等于标签类别数的NiN块,然后使?全局平均池化层对每个通道中所有元素求平均并直接?于分类。

GoogLeNet

一个Inceptionn模块,会对每一个通道进行填充以得到相同大小的输出。GoogLeNet由若干个Inception组成的模块串联构成。

原文地址:https://www.cnblogs.com/amber-cui/p/12332897.html

时间: 2024-10-13 05:38:07

Task 05 打卡的相关文章

Task 04 打卡

机器翻译及相关技术 翻译前准备 清洗(大小写转换 标点符号) 分词(每个单词分开,生成一一对应的列表) 建立词典(根据词频进行统计 单词对应唯一id) Encoder-Decoder encoder将输入转化为隐藏状态,再由decoder将隐藏状态输出为翻译后语言. sequence to sequence模型 运用到循环神经网络对下一个单词进行预测 将单词翻译成对应的词向量 beam search 依次根据每一个位置的局部最优解选取该位置的单词(贪婪搜索) 束搜索相比贪婪搜索增加了束宽(bea

Gradle Goodness: Continue Build Even with Failed Tasks

If we run a Gradle build and one of the tasks fails, the whole build stops immediately. So we have fast feedback of our build status. If we don't want to this and want Gradle to execute all tasks, even though some might have failed, we use the comman

SFM的MATLAB版本代码

% 试着实现 SFM clear all;clc;close all; im1 = rgb2gray(imread('E:\三维重建\matlab_3D_reconstruct\1.jpg')); im2 = rgb2gray(imread('E:\三维重建\matlab_3D_reconstruct\2.jpg')); im1 = im1'; im2 = im2'; [im1, des1, locs1] = siftFunc(im1); [im2, des2, locs2] = siftFun

用redis实现支持优先级的消息队列

用redis实现支持优先级的消息队列 为什么需要消息队列 系统中引入消息队列机制是对系统一个非常大的改善.例如一个web系统中,用户做了某项操作后需要发送邮件通知到用户邮箱中.你可以使用同步方式让用户等待邮件发送完成后反馈给用户,但是这样可能会因为网络的不确定性造成用户长时间的等待从而影响用户体验. 有些场景下是不可能使用同步方式等待完成的,那些需要后台花费大量时间的操作.例如极端例子,一个在线编译系统任务,后台编译完成需要30分钟.这种场景的设计不可能同步等待后在回馈,必须是先反馈用户随后异步

Seven Kinds of Testers - 七种类型的测试

最近读了James大叔的一篇总结Tester类型的文章,获益良多.原文叫做Seven Kinds of Testers(链接:http://www.satisfice.com/blog/archives/893). 可爱的James大叔还对每种类型的Tester给出了忠告.其实后最三种并非专职的Tester,而是做着和Tester相关工作的其他工种. Administrative Tester-管理型Tester 该类型的Tester主要是做task或者做卡(敏捷项目中的Story卡),目标就是

ISO8583报文协议详解

ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分. 8583包前面一段为位图,用来确定包的字段域组成情况. 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础. 1.位图描述如下: 位图位置:1 格式:定长 类型:B16(二进制16位,16*8=128bit) 描述: 如将位图的第一位设为'1',表示使用扩展位图(128个域),否则表示只使用基本位图(64个域). 如使用

ISO8583报文协议

最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等.在各个计算机设备之间,需要交换数据.我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有对数据进行编码,则这些数据没有人能够理解,属于没有用的数据.起初的X.25.SDLC以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议,它们解决了最底层的通讯问题,能够将一串字符从一个地方传送到另一个地方.但是,仅仅传送字符串是没有太大意义的,怎样来解析字符串代表什么内容是非常重要的,否则传

eclipse中建geoserver源码

概述:本文讲述的是在eclipse中如何构建geoserver源码工程,其中涉及到了jdk,github,marven等. 1.安装git 从(http://git-scm.com/download/win),获得Git-1.9.0-preview2014021 7.exe文件,直接安装即可.安装成功后,在任何处所右击鼠标,出现如下图所示: 百度网盘下载 2.从git中签出geoserver源码 点击"Git GUI"将呈现如下界面,选择"克隆已有版本",进入源码克

flutter 卡在Running Gradle task 'assembleDebug'...

Android项目运行时出错 卡在Initializing gradle… 运行时会卡在Initializing gradle..., 此时因为Android项目会用到Gradle, 如果没有FQ,下载速度会非常慢, 此时我们可以在项目中的android/gradle/wrapper/gradle-wrapper.properties中查看gradle版本号以及地址, 我们可以手动下载然后解压到~/.gradle/wrapper/dists/中. 卡在Running ‘gradle assemb