吴恩达公开课笔记--第3单元第2周内容

2024-05-14 06:38

本文主要是介绍吴恩达公开课笔记--第3单元第2周内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.1 为什么要进行实例探究

在上一周,我们已经学习了组成神经网络模型的基础构件,如卷积层、池化层、全连接层等内容。本节课主要介绍在计算机视觉领域近些年发展过程中积累的优秀实例,通过实例能够了解学习如何对基础的构件进行组合。从而在以后自己做计算机
视觉相关任务时能够有所启发。

网络总览:

经典的网络模型:

  • LeNet-5
  • AlexNet
  • VGG

卷积残差网络:

  • ResNet (152层的神经网络)

2.2 经典网络

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3 残差网络

太深的神经网络训练起来很难,因为有梯度消失和爆炸这类问题。
在本节课中,我们将学习到跳跃连接(skip connection),它能让你从一层中得到激活,并突然将它传递给下一层,甚至更甚的神经网络层。利用它,可以训练网络层很深很深的残差网络(ResNet)。

残差网络是利用了残差结构的网络。
在这里插入图片描述

2.4 残差网络为什么有用?

在之前的课程中介绍到,如果我们设计了更深层的网络,它会使得你用训练集训练神经网络的能力下降。这也是为什么有时你不希望有太深的神经网络。
ResNet 与之不同,下面看一个例子

在这里插入图片描述
下面是论文图例,展示ResNet 和 Plain 的区别
在这里插入图片描述
这里值得注意的是,ResNet 中使用到很多填充方式为same的3*3的过滤器,这样能使得输出后的维度和输入前的维度一致,更有利于残差块中的计算。对于维度不同的地方,需要使用ws矩阵去与a[l]相乘,来进行维度调整。

2.5 网络的1*1 卷积

在设计网络架构时,一种很有用的想法是用1*1卷积。

对于一个通道为1的来说,没什么作用,就是把原来的输入乘以了某个数字。
在这里插入图片描述

对于多通道的输入来说,可以理解为接收同一高度和同一宽度下不同通道的输入值,分别与1*1过滤器中对应通道的值相乘,然后将ReLU作用于它,输出结果。
同时因为有多个过滤器,意味着你有不止一个单元,而是多个单元在接受输入图像中一面中的所有数作为输入。
在这里插入图片描述

所以对1*1的卷积,本质上是一个完全连接的神经网络。

举一个1*1卷积的应用例子:

如果我们打算对输入数据的宽度和高度进行调整,可以通过一层池化层来解决。
如果我们觉得通道数过大,想缩小它,可以使用1*1的卷积。

在这里插入图片描述

2.6 谷歌 Inception 网络简介

为卷积网络设计某一层时,您可能需要选择11的卷积核、或者33的卷积核、5*5的卷积核,又或者需要一个池化层,谷歌Inception 网络就是指构造复杂的网络结构,将各种层都用上,这样的效果也很好。

在这里插入图片描述
以上就是Inception 网络的核心,它使用到了11、33、5*5的卷积核,同时也使用到了最大池化。这里需要注意的是为了保证输出的宽和高的维度相同,在使用卷积或者池化过程中,都需要使用填充操作。

这样的一个优点就是我们不用再选择使用哪一种卷积核,而是交给神经网络自己去学习每一个卷积核的参数。

下面我们关注下Inception 中计算成本,我们以其中的5*5的卷积核来计算:
在这里插入图片描述
如此剧烈的缩小特征表示的大小,会不会影响神经网络的性能?答案是只要合理的设计这个瓶颈层,就既能够缩小输入张量的维度,又能够不影响神经网络的性能,同时也减少了计算成本。

2.7 Inception 网络

和上一节介绍的那样,为了减少计算成本,增加了一个11的卷积层作为瓶颈层。
在最大池化层后面为了缩小宽和高的维度,也增加了一个1
1的卷积层。
最后做了一个通道的连接。
在这里插入图片描述

这里是Incepetion network 主要的网络结构,这里可以看到使用了很多重复的Inception模块。同时为了缩小宽和高的维度,也在Inception模块之间加了最大池化层。网络最后是全连接层,和softmax输出层。

这个网络是Google工程师开发的,称之为GoogleNet.

在这里插入图片描述

2.8 使用开源的实现方案

如果看到一篇论文想进行复现,可以先在开源社区查找是否有相关的实现。

2.9 迁移学习

如果想训练一个计算机视觉项目,而不想从零开始训练权重,最好的方式是下载已经训练好的网络结构,把它作为预训练。
迁移到你感兴趣的新任务上。

可以利用别人已经训练好的权重(这些可能是别人使用很多GPU经过很长时间,并经过不断调试得到的模型),为自己的神经网络做一个好的初始化开端。

在这里插入图片描述

当自身数据集比较少时,选择冻结softmax 前面的所有层,也即冻结前面层的权重。修改softmax 层,修改为符合自己类别的输出层,然后只训练与自己softmax层的参数。

同时一个技巧是由于前面的层和权重都冻结了,所以为了避免每次迭代都需要计算从输入到中间每层的计算,可以把所有样本从输入到冻结的最后一层这个过程的输出提前计算出来,保存下来。以后再每次都可以直接使用。这样就会提高训练速度。

如果你的数据集更大,一个经验之谈是可以冻结较少的层, 然后接下来有几种方式:一种方式是使用原有的权重作为初始化,然后继续训练自己的权重;另一个方式是去掉原有的层,重新用自己的网络层和softmax输出。

最后,假如你有足够多的数据和GPU资源,你可以用原有权重来初始化整个网络并开始训练。训练来更新所有的权重和网络层。

2.10 数据扩充

计算机视觉常见的数据增强方法:

1. 垂直镜像

在这里插入图片描述

2. 随机裁剪

在这里插入图片描述

对数据集的不同随机裁剪,注意随机裁剪的大小要占原图较大的部分,不然可能会存在完全看不出特定物体的特征。

垂直镜像和随机裁剪在实际中比较常用,还有一些方式比如旋转、剪切、局部扭曲等也可以实现数据增强,但实际使用相对较少。

3. 色彩变化

在这里插入图片描述

在三个通道上加入不同的扰动,这里样例中为了让大家能看清,设置的扰动值比较大,实际上都会小。

通过色彩变化,可以让学习算法在应用图像色彩变化时健壮性更好。

这里着重提一下PCA数据增强,在AlexNet 中有关于此算法的细节。

总结:
数据增强也有超参数,比如实现多大程度的色彩变化、用什么参数来做随机裁剪等。
一个有效的方式是直接用其他人用到的数据增强的开源实现,作为一个很好的开始。

2.11 计算机视觉现状

这篇关于吴恩达公开课笔记--第3单元第2周内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988020

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个