CNN原理和结构

观点提出

关于照片的三种观点引出了CNN的作用。

  1. 局部性:某一特征只出现在一张image的局部位置中。
  2. 相同性: 同一特征重复出现。例如鸟的羽毛。
  3. 不变性:subsampling下图片性质不变。类似于图片压缩。

相比与Fully Connected,减少了权重数目。

组成结构

卷积层

使用一个集合的滤波器在输入数据上滑动,得到内积,形成K张二维的激活图,作为该层卷积层的输出。

  1. 每类的滤波器寻找一种特征进行激活。
  2. 一个滤波器的高度必须与输入数据体的深度一致。
  3. 卷积层的输出深度是一个超参数,它与使用的滤波器的数量一致。

    例如:

    一张28 * 28 * 3的照片,\(W_1=28, H_1=28, D_1=3\),故感受野的尺寸可以是 5 * 5 * 3的。

    若有16个滤波器同时运算,则输出层数为16。

4个超参数:滤波器数量\(K\),空间尺寸\(F\),滑动步长\(S\),零填充数量\(P\)。

一次过滤后输出体的尺寸 \(W_2 * H_2 * D_2\)

\[W_2 = \frac{W_1 - F + 2P}{S} + 1 \quad \quad H_2 = \frac{H_1 - F + 2P}{S} + 1
\]

步长必须是整数,零填充数量$ \frac{F - step}{2}$

参数共享:相同的滤波器可以检测出不同位置的相同特征,可以有效减少参数。

小滤波器的有效性:多个卷积层首先与非线性激活层交替的结构,比单一卷积层的结构更能提取出深层的特征;小滤波器组合使用参数更少,但不足的是反向更新参数时,可能会使用更多的内存。

池化层

逐渐降低数据体的空间尺寸,这样能够减少网络中参数的数量。

2个超参数:空间尺寸\(F\),滑动步长\(S\)。

最常用的池化层形式是尺寸为2*2的窗口,滑动步长为2,对图像进行采样,将其中75%的激活信息都丢掉,只选择其中最大的保留,以此去掉一些噪声信息。

平均池化一般放在CNN的最后一层。

CNN模块等

参数列表

卷积层参数

  1. in_channels: 当图片为RGB时为3,否则为1。对应的是输入数据体的深度。
  2. out_channels:输出数据体的深度。
  3. kernel_size:滤波器的大小,单位pixel。
  4. stride:步长
  5. padding:=0表示四周不进行0填充,=1表示进行1个像素点的填充。

池化层参数

  1. kernel_size:=2表示 2*2的小矩阵中选max。

CNN模型:ResNet

若将输入设为X,将某一有参网络层设为H,那么以X为输入的此层的输出将为H(X)。一般的CNN网络如Alexnet/VGG等会直接通过训练学习出参数函数H的表达,从而直接学习X -> H(X)。

而残差学习则是致力于使用多个有参网络层来学习输入、输出之间的参差即H(X) - X即学习X -> (H(X) - X) + X。其中X这一部分为直接的identity mapping,而H(X) - X则为有参网络层要学习的输入输出间残差。

class CNN(nn.Module):
..
def forward(self, x):
residual = x # 代入层结构 if self.downsample is not None:
residual = self.downsample(x) out += residual
#...

莫烦 - Pytorch学习笔记 [ 二 ] CNN ( 1 )的更多相关文章

  1. 莫烦pytorch学习笔记(二)——variable

    .简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子, ...

  2. 莫烦pytorch学习笔记(八)——卷积神经网络(手写数字识别实现)

    莫烦视频网址 这个代码实现了预测和可视化 import os # third-party library import torch import torch.nn as nn import torch ...

  3. 莫烦pytorch学习笔记(七)——Optimizer优化器

    各种优化器的比较 莫烦的对各种优化通俗理解的视频 import torch import torch.utils.data as Data import torch.nn.functional as ...

  4. 莫烦PyTorch学习笔记(五)——模型的存取

    import torch from torch.autograd import Variable import matplotlib.pyplot as plt torch.manual_seed() ...

  5. 莫烦PyTorch学习笔记(六)——批处理

    1.要点 Torch 中提供了一种帮你整理你的数据结构的好东西, 叫做 DataLoader, 我们能用它来包装自己的数据, 进行批训练. 而且批训练可以有很多种途径. 2.DataLoader Da ...

  6. 莫烦PyTorch学习笔记(三)——激励函数

    1. sigmod函数 函数公式和图表如下图     在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率.sigmod函数 ...

  7. 莫烦 - Pytorch学习笔记 [ 一 ]

    1. Numpy VS Torch #相互转换 np_data = torch_data.numpy() torch_data = torch.from_numpy(np_data) #abs dat ...

  8. 莫烦PyTorch学习笔记(五)——分类

    import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...

  9. 莫烦PyTorch学习笔记(四)——回归

    下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...

随机推荐

  1. Python连载59-HTTP首部字段和消息头,Thinker简介

    一.首部字段或者消息头 1.下面几个类型都是请求的: User-Agent:关于浏览器和它平台的消息,如Mozilla5.0 Accept:客户端能处理的页面的类型,如text/html Accept ...

  2. AOP底层实现原理

    有两种方法实现: 当实现接口时,采用动态代理 另一种采用cglib cglib和动态代理并没有谁好谁坏,就像做菜一样,一种菜可以有多种味道,使用不同的方法就有不同的模式

  3. java截取小数点后两位

    String a = "123.3445776";int i = a.indexOf(".");System.out.println(a.substring(0 ...

  4. PL2303HXA自2012已停产

    解决"PL2303HXA自2012已停产,请联系供货商" USB不识别的问题: 问题是WIN10自带的驱动不兼容引起的,只能安装早期驱动,再驱动程序中选择旧版本驱动即可

  5. css实现单行和多行省略号

    1.单行省略 { width:300px; overflow: hidden; text-overflow:ellipsis; whitewhite-space: nowrap; } 注:单行省略必须 ...

  6. CDH搭建大数据集群(5.10.0)

    纠结了好久,还是花钱了3个4核8G的阿里云主机,且行且珍惜,想必手动搭建过Hadoop集群的完全分布式.HBase的完全分布式的你(当然包括我,哈哈),一定会抱怨如此多的配置,而此时CDH正是解决我们 ...

  7. P2141

    总算过了,看了题解才知道是因为重复的不算,比如 1 + 4.4 + 1.2 + 3.3 + 2 都是重复,也就是结果相同的不同的两个数只能出现一组.于是加上判断就好. #include <bit ...

  8. VMware15下载、安装、激活

    1.VMware15下载 链接:https://pan.baidu.com/s/1bI8LReRY-5k81O3rrNgg-A  提取码:6c03 2.VMware15安装 3.VMware15激活

  9. 【Go语言系列】第三方框架和库——GIN:快速入门

    要求要安装Gin软件包,需要:1.安装Go(需要1.11+版本)2.设置Go工作区 安装1.下载并安装 gin: $ go get -u github.com/gin-gonic/gin 2.将 gi ...

  10. springboot2.x整合redis

    pom文件 <!--springboot中的redis依赖--> <dependency> <groupId>org.springframework.boot< ...