、胶囊网络

池化运算会丢失一些图像信息。这是因为为了获得更小的特征级图像表示,池化会丢弃像素信息。与池化层相比,有一些分类方法不会丢弃空间信息,而是学习各个部分之间的关系(例如眼睛、鼻子和嘴之间的空间关系)。

学习各部分之间的空间关系的一种方法就叫胶囊网络。

胶囊网络能够从图像中检测出对象的各个部分,并表示这些部分之间的空间关系。如果对象(例如人脸)具有不同的形态和典型数量的特征(眼睛、鼻子、嘴),胶囊网络便能够识别同一对象,即使没有在训练数据里见过这些形态。

胶囊网络由父节点和子节点组成,这些节点构成了对象的完整样貌。

在上述示例中,模型能够识别叶节点中的人脸部分(眼睛、鼻子、嘴等),然后在父节点中形成更完整的人脸部分。

什么是胶囊

胶囊实际上是节点集合,每个节点都包含关于特定部分的信息,例如宽度、方向、颜色等特性。注意,每个胶囊都输出一个向量,该向量由大小和方向组成。

  • 大小 (m) = 某个部分存在的概率;值在 0 到 1 之间。
  • 方向 (theta) = 某个部分的状态。

我们可以对这些输出向量执行数学运算并构建一个解析树,最终识别出由多个小部分组成的完整对象。

大小是一个特殊的属性,即使对象朝着不同的方向,大小也应该很大,如下图所示。

增加深度

 pytorch层级

卷积层,通常我们在PyTorch 中使用 nn.Conv2d 定义卷积层,并指定以下参数:

nn.conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0)
in_channels 是指输入深度。对于灰阶图像来说,深度 = 1
out_channels 是指输出深度,或你希望获得的过滤图像数量
kernel_size 是卷积核的大小(通常为 3,表示 3x3 核)
stride 和 padding 具有默认值,但是应该根据你希望输出在空间维度 x, y 里具有的大小设置它们的值

pytorch中的卷积层

要在 PyTorch 中创建卷积层,必须首先导入必要的模块:

import torch.nn as nn

然后定义卷积层和模型的前馈行为(输入如何经过网络层级)。首先必须定义一个 Model 类并填写两个函数。

你可以通过以下格式在 __init__ 函数里定义卷积层:

self.conv1=nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0))

forward

然后在 forward 函数里引用该层级!在此例中,我传入了输入图像 x,并向此层的输出应用了 ReLU 函数。

x=F.relu(self.conv1(x))

参数

必须传递以下参数:

  • in_channels - 输入数量(深度),例如 RGB 图像是 3。
  • out_channels - 输出通道的数量,即卷积层包含的过滤“图像”数量,或者将应用到输入上的唯一卷积核数量。
  • kernel_size - 表示(方形)卷积核的高度和宽度。

你还可以调整其他可选参数:

  • stride - 卷积步长。如果不指定任何值,stride 将设为 1
  • padding - 输入数组周围的 0 边。如果不指定任何值,padding 将设为 0

注意:可以将 kernel_size 和 stride 表示为数字或元组。

你还可以设置很多其他可调参数,从而更改卷积层的行为。要了解详情,请参阅此官方文档。

池化层

池化层的参数是核大小和步长。通常和下采样因子的值一样。例如,以下代码将使输入的 x-y 维度下采样到一半大小:

self.pool=nn.MaxPool2d(2,2)

以下代码将池化层应用到了 forward 函数。

x=F.relu(self.conv1(x))
x=self.pool(x)

卷积示例 1

假设我要构建一个 CNN,输入层接受的是 200 x 200 像素(对应于高 200、宽 200、深 1 的三维数组)的灰阶图像。然后,假设下一层是一个卷积层,包含 16 个过滤器,每个过滤器的宽和高都是 2。在进行卷积运算时,我希望过滤器一次跳过 2 个像素。但是我不希望过滤器越过图像边界;换句话说,我不想用 0 填充图像。要构建此卷积层,我会使用以下代码:

self.conv1=nn.Conv2d(1,16,2,stride=2)

序列模型

我们还可以在 __init__ 函数里使用 Sequential 封装容器,这样就能在 PyTorch 中创建 CNN 模型。序列模型使我们能够堆叠不同的层级,并在层级之间指定激活函数。

def __init__(self):super(ModelName, self).__init__()self.features = nn.Sequential(nn.Conv2d(1, 16, 2, stride=2),nn.MaxPool2d(2, 2),nn.ReLU(True),nn.Conv2d(16, 32, 3, padding=1),nn.MaxPool2d(2, 2),nn.ReLU(True) 

优达学城深度学习之七——TensorFlow卷积神经网络相关推荐

  1. 优达学城深度学习之六——TensorFlow卷积神经网络

    TensorFlow卷积层 TensorFlow 提供了 tf.nn.conv2d() 和 tf.nn.bias_add() 函数来创建你自己的卷积层. # Output depth k_output ...

  2. 优达学城-深度学习笔记(一)

    优达学城-深度学习笔记(一) 标签: 机器学习 优达学城-深度学习笔记一 一 神经网络简介 最大似然概率 交叉熵Cross entropy 1交叉熵代码实现 2多类别交叉熵 对数几率回归的误差函数co ...

  3. 优达学城 深度学习 任务1

    这几天刚好有环境,打算学习一下深度学习 看了一圈介绍,发现优达学城的深度学习课程作为入门课程还是不错的 今天看了第一章节的视频,顺便做了任务1 任务1难度不大,按照网站上的说明可以完成下载.打包等工作 ...

  4. 优达学城 深度学习 任务2

    不得不说优达学城的课程作为入门还真是不错,打算明年买一个纳米课程试一下. 说明 任务2可以说是真正开始进入深度学习的领域 还是用任务1处理好的数据集 任务分为3个阶段 梯度下降算法(线性分类器) 批随 ...

  5. 优达学城深度学习之三(上)——卷积神经网络

    学习如何用神经网络来解决分类问题. 开始都会说什么是机器学习?机器学习的应用是什么?用机器在海量数据中学习得到可以解决一类问题的办法,这就是我的理解.图像处理.文本处理.无人驾驶.等,深度学习最热门的 ...

  6. 优达学城深度学习(之四)——jupyter notebook

    Jupyter notebook 是什么? 欢迎学习本课程--如何使用 Jupyter notebook.Jupyter notebook 是一种 Web 应用,能让用户将说明文本.数学方程.代码和可 ...

  7. 优达学城深度学习之五——卷积神经网络

    梯度下降算法推导与实现 import matplotlib.pyplot as plt import numpy as np import pandas as pd#Some helper funct ...

  8. 优达学城深度学习之三(下)——卷积神经网络

    一.One-Hot编码 计算机在表示多结果的分类时,使用One-Hot编码是比较常见的处理方式.即每个对象都有对应的列. 二.最大似然率 下面是两幅图像,比较两幅图像,试通过概率的方法来讨论一下为什么 ...

  9. 优达学城深度学习之二——矩阵数学和Numpy复习

    一.数据维度 维度(scalar),张量(Tensor).3表示零维张量,[1 2 3]表示一维张量,矩阵表示二维张量,任何大于二维张量就叫张量(Tensor).如下图所示: 二.Numpy简介 2. ...

最新文章

  1. 简洁实用的Redis分布式锁用法
  2. 多线程的多核分配问题验证
  3. DNS 错误事件4000 4013
  4. ajax option请求后无post请求_ThingJS:一种浏览器、服务器和技术的新组合方法——Ajax...
  5. 第二章 IOC的配置使用 --《跟我学Spring》笔记 张开涛
  6. windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
  7. c语言数字语音播报,金额数字语音播报
  8. 卡尔曼滤波-卡尔曼滤波全篇讲解
  9. 构造体中变量后面的冒号_flow中问号在参数后面和在冒号有什么区别?declare type的作用是?看英文文档有点一知半解...
  10. Ventana Research|是时候把指标中台纳入企业数据架构了!
  11. 【Elementory OS 6】安装 tweak
  12. 使用backdrop-filter部分场景的替代效果
  13. 2021-07-12 怎么将桌面图标变大变小
  14. StringUtils.isEmpty()方法
  15. 我以过来人的身份告诉你手工测试人员如何转测试开发?
  16. Bochs 调试指令
  17. 51nod 2455 花园
  18. 浙大这个班太牛气!诞生128家创业公司,总市值高达千亿
  19. php 微信全员分销_php筹建微信企业分销网站常见功能
  20. 软考高项的证书好处这么多,赶紧收藏

热门文章

  1. MAC安装配置maven环境变量
  2. STL map 内存改变,迭代器失效,_Isnil(_Ptr)和红黑树
  3. 初级黑客安全技术命令详解
  4. 关于oracle的物理dg,oracle物理DG管理-redo数据传输,应用与三种模式
  5. C语言-获取当前时间-格式化输出(完整代码)
  6. enumerate在python中是什么意思_python中enumerate什么意思
  7. 26日直播预告丨 经典知识库:ASM元数据简介及案例分享
  8. 资源放送丨《 先睹为快!Oracle 20c新特性解析》PPT视频
  9. 中国的 30万 DBA 们来自何方,向何处去?
  10. 阿里巴巴数据库分库分表的最佳实践