优达学城深度学习之七——TensorFlow卷积神经网络
一、胶囊网络
池化运算会丢失一些图像信息。这是因为为了获得更小的特征级图像表示,池化会丢弃像素信息。与池化层相比,有一些分类方法不会丢弃空间信息,而是学习各个部分之间的关系(例如眼睛、鼻子和嘴之间的空间关系)。
学习各部分之间的空间关系的一种方法就叫胶囊网络。
胶囊网络能够从图像中检测出对象的各个部分,并表示这些部分之间的空间关系。如果对象(例如人脸)具有不同的形态和典型数量的特征(眼睛、鼻子、嘴),胶囊网络便能够识别同一对象,即使没有在训练数据里见过这些形态。
胶囊网络由父节点和子节点组成,这些节点构成了对象的完整样貌。
在上述示例中,模型能够识别叶节点中的人脸部分(眼睛、鼻子、嘴等),然后在父节点中形成更完整的人脸部分。
什么是胶囊
胶囊实际上是节点集合,每个节点都包含关于特定部分的信息,例如宽度、方向、颜色等特性。注意,每个胶囊都输出一个向量,该向量由大小和方向组成。
- 大小 (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卷积神经网络相关推荐
- 优达学城深度学习之六——TensorFlow卷积神经网络
TensorFlow卷积层 TensorFlow 提供了 tf.nn.conv2d() 和 tf.nn.bias_add() 函数来创建你自己的卷积层. # Output depth k_output ...
- 优达学城-深度学习笔记(一)
优达学城-深度学习笔记(一) 标签: 机器学习 优达学城-深度学习笔记一 一 神经网络简介 最大似然概率 交叉熵Cross entropy 1交叉熵代码实现 2多类别交叉熵 对数几率回归的误差函数co ...
- 优达学城 深度学习 任务1
这几天刚好有环境,打算学习一下深度学习 看了一圈介绍,发现优达学城的深度学习课程作为入门课程还是不错的 今天看了第一章节的视频,顺便做了任务1 任务1难度不大,按照网站上的说明可以完成下载.打包等工作 ...
- 优达学城 深度学习 任务2
不得不说优达学城的课程作为入门还真是不错,打算明年买一个纳米课程试一下. 说明 任务2可以说是真正开始进入深度学习的领域 还是用任务1处理好的数据集 任务分为3个阶段 梯度下降算法(线性分类器) 批随 ...
- 优达学城深度学习之三(上)——卷积神经网络
学习如何用神经网络来解决分类问题. 开始都会说什么是机器学习?机器学习的应用是什么?用机器在海量数据中学习得到可以解决一类问题的办法,这就是我的理解.图像处理.文本处理.无人驾驶.等,深度学习最热门的 ...
- 优达学城深度学习(之四)——jupyter notebook
Jupyter notebook 是什么? 欢迎学习本课程--如何使用 Jupyter notebook.Jupyter notebook 是一种 Web 应用,能让用户将说明文本.数学方程.代码和可 ...
- 优达学城深度学习之五——卷积神经网络
梯度下降算法推导与实现 import matplotlib.pyplot as plt import numpy as np import pandas as pd#Some helper funct ...
- 优达学城深度学习之三(下)——卷积神经网络
一.One-Hot编码 计算机在表示多结果的分类时,使用One-Hot编码是比较常见的处理方式.即每个对象都有对应的列. 二.最大似然率 下面是两幅图像,比较两幅图像,试通过概率的方法来讨论一下为什么 ...
- 优达学城深度学习之二——矩阵数学和Numpy复习
一.数据维度 维度(scalar),张量(Tensor).3表示零维张量,[1 2 3]表示一维张量,矩阵表示二维张量,任何大于二维张量就叫张量(Tensor).如下图所示: 二.Numpy简介 2. ...
最新文章
- 简洁实用的Redis分布式锁用法
- 多线程的多核分配问题验证
- DNS 错误事件4000 4013
- ajax option请求后无post请求_ThingJS:一种浏览器、服务器和技术的新组合方法——Ajax...
- 第二章 IOC的配置使用 --《跟我学Spring》笔记 张开涛
- windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
- c语言数字语音播报,金额数字语音播报
- 卡尔曼滤波-卡尔曼滤波全篇讲解
- 构造体中变量后面的冒号_flow中问号在参数后面和在冒号有什么区别?declare type的作用是?看英文文档有点一知半解...
- Ventana Research|是时候把指标中台纳入企业数据架构了!
- 【Elementory OS 6】安装 tweak
- 使用backdrop-filter部分场景的替代效果
- 2021-07-12 怎么将桌面图标变大变小
- StringUtils.isEmpty()方法
- 我以过来人的身份告诉你手工测试人员如何转测试开发?
- Bochs 调试指令
- 51nod 2455 花园
- 浙大这个班太牛气!诞生128家创业公司,总市值高达千亿
- php 微信全员分销_php筹建微信企业分销网站常见功能
- 软考高项的证书好处这么多,赶紧收藏
热门文章
- MAC安装配置maven环境变量
- STL map 内存改变,迭代器失效,_Isnil(_Ptr)和红黑树
- 初级黑客安全技术命令详解
- 关于oracle的物理dg,oracle物理DG管理-redo数据传输,应用与三种模式
- C语言-获取当前时间-格式化输出(完整代码)
- enumerate在python中是什么意思_python中enumerate什么意思
- 26日直播预告丨 经典知识库:ASM元数据简介及案例分享
- 资源放送丨《 先睹为快!Oracle 20c新特性解析》PPT视频
- 中国的 30万 DBA 们来自何方,向何处去?
- 阿里巴巴数据库分库分表的最佳实践