莫烦 - Pytorch学习笔记 [ 二 ] CNN ( 1 )
CNN原理和结构
观点提出
关于照片的三种观点引出了CNN的作用。
- 局部性:某一特征只出现在一张image的局部位置中。
- 相同性: 同一特征重复出现。例如鸟的羽毛。
- 不变性:subsampling下图片性质不变。类似于图片压缩。
相比与Fully Connected,减少了权重数目。
组成结构
卷积层
使用一个集合的滤波器在输入数据上滑动,得到内积,形成K张二维的激活图,作为该层卷积层的输出。
- 每类的滤波器寻找一种特征进行激活。
- 一个滤波器的高度必须与输入数据体的深度一致。
- 卷积层的输出深度是一个超参数,它与使用的滤波器的数量一致。
例如:
一张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\)
\]
步长必须是整数,零填充数量$ \frac{F - step}{2}$
参数共享:相同的滤波器可以检测出不同位置的相同特征,可以有效减少参数。
小滤波器的有效性:多个卷积层首先与非线性激活层交替的结构,比单一卷积层的结构更能提取出深层的特征;小滤波器组合使用参数更少,但不足的是反向更新参数时,可能会使用更多的内存。
池化层
逐渐降低数据体的空间尺寸,这样能够减少网络中参数的数量。
2个超参数:空间尺寸\(F\),滑动步长\(S\)。
最常用的池化层形式是尺寸为2*2的窗口,滑动步长为2,对图像进行采样,将其中75%的激活信息都丢掉,只选择其中最大的保留,以此去掉一些噪声信息。
平均池化一般放在CNN的最后一层。
CNN模块等
参数列表
卷积层参数:
in_channels
: 当图片为RGB时为3,否则为1。对应的是输入数据体的深度。out_channels
:输出数据体的深度。kernel_size
:滤波器的大小,单位pixel。stride
:步长padding
:=0表示四周不进行0填充,=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 )的更多相关文章
- 莫烦pytorch学习笔记(二)——variable
.简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子, ...
- 莫烦pytorch学习笔记(八)——卷积神经网络(手写数字识别实现)
莫烦视频网址 这个代码实现了预测和可视化 import os # third-party library import torch import torch.nn as nn import torch ...
- 莫烦pytorch学习笔记(七)——Optimizer优化器
各种优化器的比较 莫烦的对各种优化通俗理解的视频 import torch import torch.utils.data as Data import torch.nn.functional as ...
- 莫烦PyTorch学习笔记(五)——模型的存取
import torch from torch.autograd import Variable import matplotlib.pyplot as plt torch.manual_seed() ...
- 莫烦PyTorch学习笔记(六)——批处理
1.要点 Torch 中提供了一种帮你整理你的数据结构的好东西, 叫做 DataLoader, 我们能用它来包装自己的数据, 进行批训练. 而且批训练可以有很多种途径. 2.DataLoader Da ...
- 莫烦PyTorch学习笔记(三)——激励函数
1. sigmod函数 函数公式和图表如下图 在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率.sigmod函数 ...
- 莫烦 - Pytorch学习笔记 [ 一 ]
1. Numpy VS Torch #相互转换 np_data = torch_data.numpy() torch_data = torch.from_numpy(np_data) #abs dat ...
- 莫烦PyTorch学习笔记(五)——分类
import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...
- 莫烦PyTorch学习笔记(四)——回归
下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...
随机推荐
- Java开发中使用模拟接口moco响应中文时乱码
场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂. 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作 ...
- java ArrayList添加元素全部一样
#开始 今天遇到了一个很神奇的事情 也即是我在用ArrayList的add方法循环加入对象的时候 发现添加的元素全部都是一样的 定位错误定位了一个下午.... 错误位置就是哪一个位置 但是就是不知道为 ...
- Tiny-shell
Tiny-shell:一个模仿bash的极简shell (一) 概述 通过构建一个简单的shell,能够对shell的工作原理进行一些了解.主要有: 重定向 流水线 前台信号处理 进程组 后台进程 作 ...
- netty笔记-:Channel与ChannelHandlerContext执行write方法的区别
在netty中有我们一般有两种发送数据的方式,即使用ChannelHandlerContext或者Channel的write方法,这两种方法都能发送数据,那么其有什么区别呢.这儿引用netty文档 ...
- mybatis实现有则更新无则插入
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" ke ...
- C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,
//将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...
- 基于G6画个xmind出来
公司产品因为业务发展,出现了一个新的需求:需要去实现知识库的层级知识展示,展示效果通过树图来实现,具体的展示形式可见下图: 其中有几个需要注意点: 节点上的详情icon可以点击,点击展开关闭详情 节点 ...
- 如何使用canvas绘制椭圆,扩展非chrome浏览器中的ellipse方法
这篇博文主要针对浏览器中绘制椭圆的方法扩展.在网上搜索了很多,发现他们绘制椭圆的方式都有缺陷.其中有压缩法,计算法,贝塞尔曲线法等多种方式.但是都不能很好的绘制出椭圆.所有我就对这个绘制椭圆的方式进行 ...
- Spring学习(十)
需要的jar包 1.Spring核心必须依赖的库:commons-logging-1.1.1.jar2.Spring IoC部分核心库: spring-beans-4.3.9.RELEASE.jar ...
- IIS 7.5 URL重写参数
URL 重写规则由以下部分组成: 模式 - 可以理解为规则,分通配符和正则匹配 条件 - 可以理解为字符串 操作 - 操作用于指定如果URL字符串与规则模式匹配并且满足所有规则条件时应 ...