04.卷积神经网络 W1.卷积神经网络

文章目录

    • 1. 计算机视觉
    • 2. 边缘检测示例
    • 3. 更多边缘检测
    • 4. Padding
    • 5. 卷积步长
    • 6. 三维卷积
    • 7. 单层卷积网络
    • 8. 简单卷积网络示例
    • 9. 池化层
    • 10. 卷积神经网络示例
    • 11. 为什么使用卷积?
    • 作业

参考:
吴恩达视频课
深度学习笔记

1. 计算机视觉

举例:图片猫🐱识别,目标检测(无人驾驶),图像风格转换(比如转成素描)等等

面临的挑战:

  • 数据的输入可能会非常大
  • 一张1000×1000的图片,特征向量的维度达到了1000×1000×3(RGB,3通道) = 300万
  • 在第一隐藏层中,你也许会有1000个隐藏单元,使用标准的全连接网络,这个矩阵的大小将会是1000×300万,矩阵会有30亿个参数
  • 在参数如此大量的情况下,难以获得足够的数据防止神经网络发生过拟合,处理30亿参数的神经网络,巨大的内存需求也受不了

你希望模型也能处理大图。为此,你需要进行卷积计算,下节将用边缘检测的例子来说明卷积的含义

2. 边缘检测示例


例如 6x6 的单通道灰度图像,检测垂直边缘,构造一个矩阵[10−110−110−1]\left[\begin{array}{rrr}1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1\end{array}\right]111000111 (过滤器 / 核),进行卷积运算*(convolve)

在这里插入图片描述

import numpy as np
image = np.array([[3,0,1,2,7,4],[1,5,8,9,3,1],[2,7,2,5,1,3],[0,1,3,1,7,8],[4,2,1,6,2,8],[2,4,5,2,3,9]])
print(image)
print('-------')
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(filter_)
print('-------')
from scipy import signal
convolution = -signal.convolve2d(image, filter_, boundary='fill',mode='valid')
print(convolution)
[[3 0 1 2 7 4][1 5 8 9 3 1][2 7 2 5 1 3][0 1 3 1 7 8][4 2 1 6 2 8][2 4 5 2 3 9]]
-------
[[ 1  0 -1][ 1  0 -1][ 1  0 -1]]
-------
[[ -5  -4   0   8][-10  -2   2   3][  0  -2  -4  -7][ -3  -2  -3 -16]]

为什么可以检测边缘?

卷积运算检测边缘

image = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0]])
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(-signal.convolve2d(image, filter_, boundary='fill',mode='valid'))
[[ 0 30 30  0][ 0 30 30  0][ 0 30 30  0][ 0 30 30  0]]

3. 更多边缘检测

可以检测明暗变化方向

竖直,水平的过滤器

在这里插入图片描述
把这9个数字当成参数,通过反向传播学习,边缘捕捉能力会大大增强(可以检查任意角度)

4. Padding

上面 6x6 的图片,经过一次过滤以后就变成 4x4 的,如果经过多层,最后的图像会变得很小。

假设原始图片是 n×nn \times nn×n,过滤器是 f×ff \times ff×f,那么输出大小是 (n−f+1)×(n−f+1)(n-f+1) \times(n-f+1)(nf+1)×(nf+1)

  • 缺点1,图像每做一次卷积,缩小一点,最后变得很小
  • 缺点2,在角落或边缘区域的像素点在输出中采用较少,丢失了图像边缘位置的许多信息

解决上面的问题:

  • 进行卷积操作前,沿图像边缘填充 p 层像素,令 (n+2∗p)−f+1=n⇒p=f−12(n+2*p)-f+1 = n \Rightarrow p = \frac{f-1}{2}(n+2p)f+1=np=2f1, 这样可以保持图像大小不变
  • 还使得边缘信息发挥作用较小的缺点被削弱

ppp 填充多少层,怎么选?

  • Valid 卷积:p=0p=0p=0
  • Same 卷积:p=f−12p = \frac{f-1}{2}p=2f1fff 通常是奇数(对称填充,有中心点)

5. 卷积步长

每次过滤器在图片中移动 s 步长(上面的 s = 1)

输出尺寸为 (n+2p−fs+1)×(n+2p−fs+1)(\frac{n+2p-f}{s}+1) \times (\frac{n+2p-f}{s}+1)(sn+2pf+1)×(sn+2pf+1),向下取整

数学中的卷积,需要在操作之前对过滤器顺时针旋转90度 + 水平翻转,深度学习里省略了该步骤,但是不影响,简化了代码

6. 三维卷积

三维卷积
输出是一个二维的,每个格子里是对应着 27个元素求和

如果希望对不同的通道进行检测边缘,对 filter 的相应层设置不同的参数就可以了

想要多个过滤器怎么办?(竖直的、水平的,各种角度的)
多个过滤器

7. 单层卷积网络

单层卷积网络

参数的个数跟图片大小无关,跟过滤器相关,假如有10个过滤器,上面每个过滤器有 27 个参数,加上 偏置 b,28个再乘以10,共计280个参数

即使图片很大,参数却很少,这就是卷积神经网络的一个特征,叫作“避免过拟合”。

维度关系

8. 简单卷积网络示例


除了 卷积层(convolution),还有 池化层(pooling),全连接层(fully connected)

9. 池化层

除了卷积层,卷积网络也经常使用池化层缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性

最大池化
Max 运算的实际作用:

  • 如果在过滤器中提取到某个特征,那么保留其最大值
  • 如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小

池化,它有一组超参数 f,sf, sf,s,但没有参数需要学习,不需要梯度下降更新

平均池化
最大池化比平均池化更常用

常用的参数值为 f=2or 3,s=2f=2 \text{ or } 3, s= 2f=2 or 3,s=2
最大池化时,很少用到 padding(p=0p=0p=0
输入输出通道数一样
最大池化只是计算神经网络某一层的静态属性,没有需要学习的参数

10. 卷积神经网络示例

卷积NN
尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,它也有可能适用于你的应用程序

11. 为什么使用卷积?

和只用全连接层相比,卷积层 的两个主要优势在于参数共享稀疏连接

  • 全连接层的参数巨大,卷积层需要的参数较少

原因:

  1. 参数共享,特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域
  2. 使用稀疏连接,一个输出仅依赖少部分的输入
    稀疏连接
    神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合

作业

作业:手动/TensorFlow 实现卷积神经网络


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中

javaSE从 2021/02/22开始,预计到2021/02/28,原本预计的算法题解先鸽一下。 -博客Blog的重要性 & Markdown语法 基础markdown语法 标题, 直接使用 ‘#’,一级二级…五级字体,斜体(左右个一个∗*∗),加…

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举2.2 一次遍历1. 题目 给出非负整数数组 A ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 L 和 M。(这里需要澄清的是,长为 L 的子数组可以出现在长为…

Java入门篇 2021/02/22

Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE,其中现如今的JavaME已经是很少见了,JavaSE是JavaEE的基础。 JDK、JER、JVM三个关系 JDK, JRE, JVM具体的关系可以参照下图,是名副其实的包含关系。 J…

LeetCode 911. 在线选举(二分查找)

文章目录1. 题目2. 解题1. 题目 在选举中,第 i 张票是在时间为 times[i] 时投给 persons[i] 的。 现在,我们想要实现下面的查询函数: TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。 在 t 时刻投出的选票也将被计入…

java 流程控制篇 2021/02/26持续更新中

1. 用户交互Scanner 1.1 简单的Scanner用法 首先,需要 import java.util.Scanner其次,需要创建一个 Scanner 类的对象, Scanner s new Scanner(System.in);通过调用Scanner对象的方法来完成, 一定要注意有开有关,最…

04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)

文章目录作业1:实现卷积神经网络1. 导入一些包2. 模型框架3. 卷积神经网络3.1 Zero-Padding3.2 单步卷积3.3 卷积神经网络 - 前向传播4. 池化层5. 卷积神经网络 - 反向传播5.1 卷积层反向传播5.1.1 计算 dA5.1.2 计算 dW5.1.3 计算 db5.2 池化层 - 反向传播5.2.1 最…

html的实战性介绍

Html 简介 超文本结构语言 html并非一种编程语言, 而是一种描述超文本文档的标记语言,用html编写的超文本文档成为html文档。 超文本文档指的是,可以加入图片、声音、动画、影视等内容,并可以利用超链接方便的从一个文件跳转到网…

LeetCode 808. 分汤(动态规划)

文章目录1. 题目2. 解题1. 题目 有 A 和 B 两种类型的汤。一开始每种类型的汤有 N 毫升。有四种分配操作: 提供 100ml 的汤A 和 0ml 的汤B。提供 75ml 的汤A 和 25ml 的汤B。提供 50ml 的汤A 和 50ml 的汤B。提供 25ml 的汤A 和 75ml 的汤B。 当我们把汤分配给某…

LeetCode 848. 字母移位(前缀和+取模)

文章目录1. 题目2. 解题1. 题目 有一个由小写字母组成的字符串 S,和一个整数数组 shifts。 我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的, ‘z’ 将会变成 ‘a’)。 例如,shift(a) b&#xff…

第一章、OS引论1

1.1 操作系统的目标和作用 1.1.1 操作系统的目标 计算机上安装操作系统,主要目标是:方便性、有效性、可扩充性和开放性。 方便性:方便用户,使计算机变得易学易用有效性:提高系统资源(资源指CPU(处理机),存储器,文件(…

LeetCode 858. 镜面反射(最小公倍数/最大公约数)

文章目录1. 题目2. 解题1. 题目 有一个特殊的正方形房间,每面墙上都有一面镜子。 除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。 正方形房间的墙壁长度为 p,一束激光从西南角射出&#xf…

Ubuntu从零安装 Hadoop And Spark

安装 linux 以Ubuntu为例 选择镜像,虚拟机安装 虚拟机下,直接安装镜像即可,选择好自己的配置,一定要注意路径名选好,而且和你虚拟机的名称匹配,这里我的镜像是 ubuntu-20.04.2.0-desktop-amd64.iso 切换…

04.卷积神经网络 W2.深度卷积网络:实例探究

文章目录1. 为什么要进行实例探究2. 经典网络3. 残差网络 ResNets4. 残差网络为什么有用5. 网络中的网络 以及 11 卷积6. 谷歌 Inception 网络简介7. Inception 网络8. 使用开源的实现方案9. 迁移学习10. 数据增强 Data augmentation11. 计算机视觉现状作业参考: 吴…

动态规划之最长上升子序列模型

动态规划分为很多模型,比如说数字三角形模型,最长上升子序列模型,背包模型,状态机模型,状态压缩,区间dp,树形dp等等 下面,我就Acwing提高课中,最长上升子序列模型进行了整…

LeetCode 900. RLE 迭代器(模拟/二分查找)

文章目录1. 题目2. 解题2.1 直接模拟2.2 二分查找1. 题目 编写一个遍历游程编码序列的迭代器。 迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某个序列的游程编码。 更具体地,对于所有偶数 i,A[i] 告诉我们在序列中重复非负整数值 A[i …

html-css练习题(系统提示)

代码赏析&#xff1a;<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&qu…

机器学习算法--线性回归分析(单元和多元)

关键词 分类模型、回归模型 存在序的离散属性、不存在序的离散属性 有监督的机器学习 回归的分类&#xff08;输入变量数目&#xff0c;输入变量和输出变量的关系&#xff09; 已知数据集&#xff0c;未知参数 均方误差最小化&#xff0c;最小二乘法 一元线性回归 多元线…

LeetCode 740. 删除与获得点数(排序+动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除每个等于 nums[i] - 1 或 nums[i] 1 的元素。 开始你拥有…

html-css练习题 (注册表单)

代码赏析&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta http-equiv"X-UA-Co…

虚拟机安装 服务器 Ubuntu Server20.04.2

虚拟机安装 服务器 Ubuntu Server20.04.2 下载地址 VMware创建新的虚拟机 首选选择典型 稍后安装操作系统&#xff0c;并点击下一步 选择Linux Ubuntu64位 命名虚拟机 指定虚拟机的容量 点击确定之后开启虚拟机 选择自己下载的镜像文件 打开虚拟机进行配置 单击…