VGG网络结构(一)

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络:

本文思路:


一、我认为学习卷积神经网络必须知道的几个概念:

1、卷积过程:

  我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大家演示一下,

  图作者文章在此:http://blog.csdn.net/silence1214/article/details/11809947

我们可以看到,卷积过程其实还是基于一个固定的矩阵,在另外一个矩阵不断一格一格扫过去的到的数值的和,(注意:这里的一格一格非常重要,因为涉及后面的概念:步长→我们不妨想一想当固定矩阵不是一格一格前进的时候,会发生什么呢?)产生的一个新的矩阵,我们以作为比较会发现:粉红色矩阵和绿色矩阵在根本上有很大不一样,

第一,卷积之后的维数降低了;第二,我们要想想为什么降维了?(思考:降低维度到底有没有规律?)

  答案是有的:我们发现橙色的固定框为3*3,绿色是5*5,出来是三乘三;

  所以规律可以得到:粉红色最后的卷积结果矩阵维度=绿色矩阵维数-橙色矩阵维数+1

  (我们又应该思考:如果我不想最后减少维度,我只希望卷积,怎么办呢?)

2、两层之间的池化:

  我们依然延用博客大牛的另一个动图(再次点赞做的精细准确!)


我们可以发现其实跟之前没什么不一样:还是以三个矩阵之间的运算,但是我们很容易发现,它并不是一行一行扫过去的,橙色矩阵维度是黄色矩阵的整数倍,所以池化的最终的结论是要把原来的维度减少到1/n.这是池化最根本的原理(当然也有特殊情况。)

(思考点:我们想象一下如果一个19*19的矩阵做池化,会是一种什么样的体验呢?我们不可以缩小整数倍!!答案会在后面的VGG16里面讲清楚,不急不急吐舌头吐舌头吐舌头


3、第三个知识点是步长的概念:

  卷积核(后面讲到VGG16会介绍)移动的步长(stride)小于卷积核的边长(一般为正方行)时,变会出现卷积核与原始输入矩阵作用范围在区域上的重叠(overlap),卷积核移动的步长(stride)与卷积核的边长相一致时,不会出现重叠现象。

  通俗一点其实就是:刚刚说的那个粉红色矩阵,他每一次移动多少格,格子就是步长!!

4、卷积核:

  一个听起来很高大上的词语,我们依然用之前的基础来解释:通俗易懂:就是粉红色矩阵的个数!!因为有时候我们要提取的特征非常多非常广泛,所以需要我们用更多的矩阵来扫(多扫几遍),那么粉红色矩阵的个数就是卷积核个数。

5、Padding:

  这个应该是最抽象的概念了:但是也不会特别难呢,就是我们在之前讲到第一点:卷积的时候,我抛下了一个问题:

 (我们又应该思考:如果我不想最后减少维度,我只希望卷积,怎么办呢?)(现在知道括号的重要性了吧哈哈?骂人骂人骂人

  现在我们来解决这个问题:比如:我们需要做一个300*300的原始矩阵,用一个3*3卷积核(粉红色矩阵)来扫,扫出来,按照之前公式,结果的矩阵应该是:298*298的矩阵,但是这样很难计算,减得也不多,反而增加我计算难度,还不如池化(pooling)来得干脆是吧!那我们就在300*300矩阵外面周围加一圈“0”,记住,是在外面外包一层“0”

重点是:这样的300*300就变成了302*302的矩阵,这样就可以完全避开卷积后那两层的抵消。

6、还有一个就是通道的概念:这个不算知识点,仅仅是一个常识词语,比如一张图片,有RGB三种颜色,对应三个灰度级别,也就是三个通道了:

更加抽象的图可以参照下面的结构:


二、等待已久的VGG16:

VGG16分为16层,我们主要讲前面的前几层(越详细越好吧,后面是一样的)

——首先教会大家一个看其他神经网络也是用的办法:官方数据表格:


看懂一些式子表达:

Conv3-512   →    第三层卷积后维度变成512;

Conv3_2 s=2     →     第三层卷积层里面的第二子层,滑动步长等于2(每次移动两个格子)

好了,我们有了以上的知识可以考试剖析VGG16卷积神经网络了


三、利用之前的基本概念来解释深层的VGG16卷及网络;

【1、从INPUT到Conv1:】


首先两个黄色的是卷积层,是VGG16网络结构十六层当中的第一层(Conv1_1)和第二层Conv1_2,他们合称为Conv1。

我们主要讲述第一个,也就是第一层(Conv1_1),它怎么把一个300*300*3的矩阵变成一个300*300*64的矩阵?


我们假设蓝色框是一个RGB图像,橙色是一个3*3*3的卷积核,我们对一个三维的27个数求和,然后扫过去,按照第一部分算的得出来的是一维的298*298的矩阵(因为卷积核也是三维所以结果是一维);

然后回想一下什么是Padding、前面也讲过它的概念了;所以不了一圈的圆,回到了300*300*1;

然后,VGG16这一层安置有64个卷积核,那么,原来的300*300*1变成300*300*64

于是我们的到了想要的东西;最后的绿色框;

【1、从Conv1到Conv2之间的过度:】


这一步用的Pooling是:2*2*64 s=2;

也就是说,步长是二,滑动的矩阵本身没有重叠;刚好减半,第三维度64不变;

【3、顺利来到Conv2并且结构完全一样进入Conv3:】

我们知道原来INPUT是300*300*3过了第一层出来时150*150*64

那么第二层仍然有池化有128个卷积核,联想推理:

出来的应该是75*75*128;这一步没有问题,我们继续往下分析:

【4、进入Conv3的推演:】


可以知道第三层有256个卷积核,包含三层小的卷基层:

【5、从Conv3到Conv4之间的过度:】


池化没有问题,但是这里75不是一个偶数怎么弄,还记得我们第一部分前面的括号吗?

就是这样,我们在75这里相加了一个一,使之成为76,变成一个偶数,还有一种方法是通过步长的设置这里先不展开来讲了;

【6、后续的步骤】

  后面的方法很简单,根据我给的那个VGG16的表格查找每一层里面有什么卷积核?多少个?池化的大小?步长多少?是否需要Padding?解决这些问题,你的VGG16就已经完全可以从头到尾说清楚了!!!

【7、Faster Rcnn的例子】

http://blog.csdn.net/errors_in_life/article/details/70916583
转载自https://blog.csdn.net/Errors_In_Life/article/details/65950699

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

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

相关文章

【Python爬虫】BeautifulSoup4 库的一些用法

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。安装 Beautiful Soup…

测试开发——flask快速入门小基础

这几天看群里面的大佬基本上个个被逼相亲,可爱小娟娟还一天相四次(简直了),我们程序员也是很帅的很美的,其实我们的头发也挺多的哈哈哈哈(至少我身边的程序员挺多头发的,当然我linux老师头发有点…

【文章】鱼那么信任水, 水却煮了鱼!

鱼那么信任水, 水却煮了鱼。 叶子那么信任风, 风却吹落了叶。 人心的冷暖, 总是一直变幻。 熟悉的陌生了, 陌生的走远了。 人与人之间, 全靠一颗心, 情与情之间, 全凭一寸真。 落叶知秋…

VGG网络结构(二)

深度学习论文随记(二)---VGGNet模型解读 Very Deep Convolutional Networks forLarge-Scale Image Recognition Author: K Simonyan , A Zisserman Year: 2014 1、 导引 VGGNet是2014年ILSVRC竞赛的第二名,没错你没听错它是第…

情人节用python写个贪吃蛇安慰自己

这几天除了吃就是睡(不知道为啥,吃饱就想睡),从大年三十到现在感觉啥都没做,写个代码安慰安慰自己吧哈哈哈哈。给大家分享几部最近看的电影(要学英语的一定要get起来)——《彩虹照耀》《罗宾逊漂…

【测试】用例设计思路-输入框类型功能

在我们的测试中,设计测试用例的质量,不仅与需求说明书有关,而且与测试人员的测试能力有关,今天我们通过一个典型的案例,总结一下对于输入框类型的功能,如何设计测试用例。 如图所示:我们需要测…

python 随机数

python中随机数的用法总结第一部分:numpy中的random模块numpy.random.randn(d0, d1, ..., dn)生成标准正态分布。括号里是生成的随机数的维度。将会得到一个ndarray or float,(括号里空着就会得到一个float)>>numpy.random.randn(3,4)array([[-0.64094426, -0…

RuntimeError: Working outside of request context. This typically means that you attempted to use fun

菜吃多了醉了一、报错情况二、解决办法一、报错情况 我在写装饰器的时候运行报错: RuntimeError: Working outside of request context.This typically means that you attempted to use functionality that needed an active HTTP request. Consult the documen…

【Python】读写文件的操作

编程语言中,我们经常会和文件和文件夹打交道,这篇文章主要讲的是Python中,读写文件的常用操作: 一、打开文件 openFile open(../Files/exampleFile.txt, a) 说明: 1. 第一个参数是文件名称,包括路径,可以是相对路径…

测试开发——flask视图函数与路由 实战重点

开头必须分享一个我的志玲姐姐,太可了!点击此处 flask视图函数与路由的关系一、视图函数与路由 实战重点1.1 一个视图函数可以绑定多个URL地址1.2 视图装饰器应该放到最外层1.3所实现的装饰器要返回视图函数的返回值二、动态路由1. 用url匹配2. 通过传参…

【Python】文件夹的常用操作

上一篇文章主要讲了Python中,读写文件的常用操作,今天这篇文章主要讲的是关于文件夹的一些常用操作: 关于文件的操作,需要导入包:import os 文件操作: #1.创建相对路径的空文件,如果已有文件…

Python 中的range(),arange()函数

1.range()返回的是range object,而np.arange()返回的是numpy.ndarray() range 尽可用于迭代,而 np.arange 作用远不止于此,它是一个序列,可被当做向量使用。 2.range()不支持步长为小数,np.arange()支持步长为小数 3.两…

SyntaxError: Non-UTF-8 code starting with ‘\xe2‘ 今天是小白上线的一天

打代码的时候第一行的utf-8注释居然空了个格 # coding utf-8估计是甜甜的恋爱想傻了,我居然还去查自己错哪里了,还说我的编码是对的鸭 正确输入: # codingutf-8

【Python爬虫】Python3+selenium环境配置

在我们爬虫爬网过程中,我们需要用到Python3selenium,Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些JavaScript渲染的页面来说,这种抓取方式非常有效。 文章参考…

numpy 数组与矩阵的乘法理解

1. 当为array的时候,默认d*f就是对应元素的乘积,multiply也是对应元素的乘积,dot(d,f)会转化为矩阵的乘积, dot点乘意味着相加,而multiply只是对应元素相乘,不相加 2. 当为mat的时候…

(AU/PS)Adobe Audition CC.exe -系统错误 由于找不到MSVCP120.dll,无法继续执行代码。重新安装程序可能会解决此问题。

bug简直难过报错情况:由于找不到MSVCP120.dll,无法继续执行代码。重新安装程序可能会解决此问题。最终解决办法心得体会https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这…

【数据库】Window环境安装MySQL Server 5.7.21

正常我们在mysql官网下载安装的MySQL比较大,因为它集成了好多东西,尽管方便,但是东西比较多,有些我们可能不想要,这时我们可以直接下载单个MySQL Server安装,所以这篇文章主要介绍的就是在window环境下安装…

产品经理:论项目计划有多重要?——软件项目管理

凡事预则立,不预则废前言一、论安迪特质与项目经理的共通性二、个人感想三、我的产品经理实习笔试前言 昨天杨老师上了一让我记忆很深刻的课,就是项目计划的重要性,以《肖申克的救赎 》为例: 《肖申克的救赎 》的背景是20世纪30年代&#xff…

Python开发中有可能遇到的套接字重复使用错误

PyCharm开发中有可能遇到的套接字重复使用错误 windows下在PyCharm中执行python代码,如果源文件被修改后,执行窗口中的运行状态会被终结,重启时有可能报如下的错误: OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/…

Android开发环境配置介绍

在我们进行AppiumAndroid进行自动化测试时,我们需要安装android_sdk环境,安装过程发现Android SDK,Android studio,AVD Manager,SDK Manager等名词,本篇文章主要介绍的就是Android开发环境的搭建&#xff0…