深度学习教程(11) | 经典CNN网络实例详解(吴恩达·完整版)

花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network) 目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层 花书+吴恩达深度学习(十二)卷积... 阅读详情


第4门课 卷积神经网络,第2周:深度卷积网络:实例探究

本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。

引言

在ShowMeAI前一篇文章 卷积神经网络解读 中我们对以下内容进行了介绍:

  • 卷积计算、填充
  • 卷积神经网络单层结构
  • 池化层结构
  • 卷积神经网络典型结构
  • CNN特点与优势

本篇内容ShowMeAI展开介绍和总结几个有名的典型CNN案例。这些CNN是最典型和有效的结构,吴恩达老师希望通过对具体CNN模型案例的分析讲解,帮助我们理解CNN并训练实际的模型。

为什么要进行实例探究? Why Look at Case Studies?

本篇涉及到的经典CNN模型包括:

  • LeNet-5
  • AlexNet
  • VGG
  • ResNet(Residual Network,残差网络)
  • Inception Neural Network

1.经典卷积网络

经典网络 Classic Networks

1.1 LeNet-5

手写字体识别模型LeNet5由Yann LeCun教授于90年代提出来,是最早的卷积神经网络之一。它是第一个成功应用于数字识别问题的卷积神经网络。在MNIST数据中,它的准确率达到大约99.2%。

LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点。

经典卷积网络

  • LeNet-5针对灰度图像而训练,因此输入图片维度为 ( 32 , 32 , 1 ) (32,32,1) (32,32,1)(注意其中通道数为1)。

  • 该模型总共包含了约6万个参数,远少于标准神经网络所需。

  • 典型的LeNet-5结构包含卷积层(CONV layer),池化层(POOL layer)和全连接层(FC layer),排列顺序一般为CONV layer ⟹ \Longrightarrow ⟹ POOL layer ⟹ \Longrightarrow ⟹ CONV layer ⟹ \Longrightarrow ⟹ POOL layer ⟹ \Longrightarrow ⟹ FC layer ⟹ \Longrightarrow ⟹ FC layer ⟹ \Longrightarrow ⟹ OUTPUT layer。一个或多个卷积层后面跟着一个池化层的模式至今仍十分常用。

  • 当LeNet-5模型被提出时,其池化层使用的是平均池化,而且各层激活函数一般选用Sigmoid和tanh。现在我们更多的会使用最大池化并选用ReLU作为激活函数。

相关论文:LeCun et.al., 1998. Gradient-based learning applied to document recognition。吴恩达老师建议精读第二段,泛读第三段。

1.2 AlexNet

AlexNet由Alex Krizhevsky于2012年提出,夺得2012年ILSVRC比赛的冠军,top5预测的错误率为16.4%,远超第一名。

AlexNet采用8层的神经网络,5个卷积层和3个全连接层(3个卷积层后面加了最大池化层),包含6亿3000万个链接,6000万个参数和65万个神经元。具体的网络结构如下图:

经典卷积网络

经典卷积网络

模型结构解析:

  • 卷积层 ⟹ \Longrightarrow ⟹ (最大)池化层 ⟹ \Longrightarrow ⟹ 全连接层的结构。
  • AlexNet模型与LeNet-5模型类似,但是更复杂,包含约6000万个参数。另外,AlexNet模型使用了ReLU函数。
  • 当用于训练图像和数据集时,AlexNet能够处理非常相似的基本构造模块,这些模块往往包含大量的隐藏单元或数据。

相关论文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。这是一篇易于理解并且影响巨大的论文,计算机视觉群体自此开始重视深度学习。

1.3 VGG

VGG是Oxford的Visual Geometry Group的组提出的CNN神经网络。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。在提出后的几年内,大家广泛应用其作为典型CNN结构。

经典卷积网络

经典卷积网络

  • VGG又称VGG-16网络,「16」指网络中包含16个卷积层和全连接层。
  • 超参数较少,只需要专注于构建卷积层。
  • 结构不复杂且规整,在每一组卷积层进行滤波器翻倍操作。
  • VGG需要训练的特征数量巨大,包含多达约1.38亿个参数。

相关论文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。

2.残差网络 ResNets

残差网络 Residual Networks - ResNets

2.1 Residual Network结构

上面提到的VGG网络在当时已经是堆叠层次构建CNN比较极限的深度了,随着神经网络层数变多和网络变深,会带来严重的梯度消失和梯度爆炸问题(参考ShowMeAI文章 深度学习的实用层面 关于梯度消失和梯度爆炸的讲解),整个模型难以训练成功。

在网络结构层面,一种解决方法是人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为Residual Networks(ResNets)残差网络。

残差网络 ResNets

上图的结构被称为残差块(Residual block)。通过捷径(Short cut,或者称跳接/Skip connections)可以将 a [ l ] a^{[l]} a[l]添加到第二个ReLU过程中,直接建立 a [ l ] a^{[l]} a[l]与 a [ l + 2 ] a^{[l+2]} a[l+2]之间的隔层联系。表达式如下:

z [ l + 1 ] = W [ l + 1 ] a [ l ] + b [ l + 1 ] z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]} z[l+1]=W[l+1]a[l]+b[l+1]

a [ l + 1 ] = g ( z [ l + 1 ] ) a^{[l+1]} = g(z^{[l+1]}) a[l+1]=g(z[l+1])

z [ l + 2 ] = W [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]} z[l+2]=W[l+2]a[l+1]+b[l+2]

a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) a^{[l+2]} = g(z^{[l+2]} + a^{[l]}) a[l+2]=g(z[l+2]+a[l])

构建一个残差网络就是将许多残差块堆积在一起,形成一个深度网络。

残差网络 ResNets

为了便于区分,在 ResNets 的论文 He et al., 2015. Deep residual networks for image recognition 中,非残差网络被称为普通直连网络(Plain Network)。将它变为残差网络的方法是加上所有的跳远连接。

理论上,随着网络深度的增加,模型学习能力变强,效果应该提升。但实际上,如下图所示,一个普通直连网络,随着神经网络层数增加,训练错误会先先减少后增多。但使用跳接的残差网络,随着网络变深,训练集误差持续呈现下降趋势。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNBHgLIA-1649925808194)(http://image.showmeai.tech/deep_learning_tutorial/186.png)]

残差网络有助于解决梯度消失和梯度爆炸问题,使得在训练更深的网络的同时,又能保证良好的性能。

2.2 残差网络有效的原因

残差网络为什么有用? Why ResNets Work?

下面我们借助1个例子来解释为什么ResNets有效,为什么它能支撑训练更深的神经网络。

如图所示,假设输入 x x x经过很多层神经网络(上图的big NN)后输出 a [ l ] a^{[l]} a[l], a [ l ] a^{[l]} a[l]经过一个Residual block输出 a [ l + 2 ] a^{[l+2]} a[l+2]。 a [ l + 2 ] a^{[l+2]} a[l+2]的表达式如下:

a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) = g ( W [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] + a [ l ] ) a^{[l+2]}=g(z^{[l+2]}+a^{[l]})=g(W^{[l+2]}a^{[l+1]}+b^{[l+2]}+a^{[l]}) a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])

输入 x x x经过Big NN后,若 W [ l + 2 ] ≈ 0 W^{[l+2]}\approx0 W[l+2]≈0, b [ l + 2 ] ≈ 0 b^{[l+2]}\approx0 b[l+2]≈0,则有:

a [ l + 2 ] = g ( a [ l ] ) = R e L U ( a [ l ] ) = a [ l ] , w h e n a [ l ] ≥ 0 a^{[l+2]}=g(a^{[l]})=ReLU(a^{[l]})=a^{[l]}, when a^{[l]}\geq0 a[l+2]=g(a[l])=ReLU(a[l])=a[l],whena[l]≥0

残差网络 ResNets

上述计算公式表明,即使发生了梯度消失 ( W [ l + 2 ] ≈ 0 (W^{[l+2]}\approx0 (W[l+2]≈0, b [ l + 2 ] ≈ 0 ) b^{[l+2]}\approx0) b[l+2]≈0),也能直接建立 a [ l + 2 ] a^{[l+2]} a[l+2]与 a [ l ] a^{[l]} a[l]的线性关系(此时 a [ l + 2 ] = a [ l ] a^{[l+2]}=a^{[l]} a[l+2]=a[l],就是identity function)。

a [ l ] a^{[l]} a[l]直接连到 a [ l + 2 ] a^{[l+2]} a[l+2],从效果来说,相当于直接忽略了 a [ l ] a^{[l]} a[l]之后的这两层神经层。很深的神经网络,由于许多Residual blocks的存在,弱化削减了某些神经层之间的联系,实现隔层线性传递,而不是一味追求非线性关系,模型本身也就能「容忍」更深层的神经网络了。而且从性能上来说,这两层额外的Residual blocks也不会降低Big NN的性能。

当然,没有发生梯度消失时,Residual blocks会忽略short cut,能训练得到跟Plain Network起到同样效果的非线性关系。

注意,如果Residual blocks中 a [ l ] a^{[l]} a[l]和 a [ l + 2 ] a^{[l+2]} a[l+2]的维度不同,通常可以引入矩阵 W s W_s Ws​,与 a [ l ] a^{[l]} a[l]相乘,使得 W s ∗ a [ l ] W_s*a^{[l]} Ws​∗a[l]的维度与 a [ l + 2 ] a^{[l+2]} a[l+2]一致。参数矩阵 W s W_s Ws​有来两种方法得到:

  • ① 将 W s W_s Ws​作为学习参数,通过模型训练得到
  • ② 固定 W s W_s Ws​值(类似单位矩阵),不需要训练, W s W_s Ws​与 a [ l ] a^{[l]} a[l]的乘积仅仅使得 a [ l ] a^{[l]} a[l]截断或者补零

上述两种方法都可行。

下图所示的是CNN中ResNets的结构对比普通直连网络和VGG19:

残差网络 ResNets

3.1x1卷积

网络中的网络以及 1×1 卷积 Network in Network and 1×1 Convolutions

在CNN中有一种现在广泛使用的CNN结构: 1 × 1 1 \times 1 1×1Convolution( 1 × 1 1 \times 1 1×1卷积,也称Networks in Networks)。它指滤波器的尺寸为1。当通道数为1时, 1 × 1 1 \times 1 1×1卷积意味着卷积操作等同于乘积操作。

1X1 卷积

而当通道数更多时, 1 × 1 1 \times 1 1×1卷积的作用实际上类似全连接层的神经网络结构,从而对数据进行升降维度(取决于滤波器个数)。

池化能压缩数据的高度( n H n_H nH​)及宽度( n W n_W nW​),而 1 × 1 1 \times 1 1×1卷积能压缩数据的通道数( n C n_C nC​)。在如下图所示的例子中,用32个大小为 1 × 1 × 192 1 \times 1 \times 192 1×1×192的滤波器进行卷积,就能使原先数据包含的192个通道压缩为32个。如下动图演示了 1 × 1 1 \times 1 1×1卷积的计算:

1X1 卷积

4.Inception网络

谷歌 Inception 网络简介 Inception Network Motivation

下面介绍一下Inception网络,它是CNN分类器发展史上一个重要的里程碑。

在Google提出Inception之前,大部分流行CNN仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。

大家观察我们之前介绍到的CNN典型结构,都是只选择单一尺寸和类型的滤波器。而Inception网络的作用即是代替人工来确定卷积层中的滤波器尺寸与类型,或者确定是否需要创建卷积层或池化层。

Inception 网络

如上图所示,Inception网络选用不同尺寸的滤波器进行Same 卷积,并将卷积和池化得到的输出组合拼接起来,最终让网络自己去学习需要的参数和采用的滤波器组合。

相关论文:Szegedy et al., 2014, Going Deeper with Convolutions

4.1 计算成本问题

在提升性能的同时,Inception网络有着较大的计算成本。如下图的例子:

Inception 网络

图中有 32 32 32个滤波器,每个滤波器的大小为 5 × 5 × 192 5 \times 5 \times 192 5×5×192。输出大小为 28 × 28 × 32 28 \times 28 \times 32 28×28×32,总共需要计算得到 28 × 28 × 32 28 \times 28 \times 32 28×28×32个结果数,对于每个数,要执行 5 × 5 × 192 5 \times 5 \times 192 5×5×192次乘法运算。加法运算次数与乘法运算次数近似相等。因此,这一层的计算量可以近似为 28 × 28 × 32 × 5 × 5 × 192 = 1.2 28 \times 28 \times 32 \times 5 \times 5 \times 192=1.2 28×28×32×5×5×192=1.2亿。

Inception引入了 1 × 1 1 \times 1 1×1卷积来减少计算量问题:

Inception 网络

如上图所示,我们先使用 1 × 1 1 \times 1 1×1卷积把输入数据从192个通道减少到16个通道,再对这个较小层运行 5 × 5 5 \times 5 5×5卷积,得到最终输出。这种改进方式的计算量为 28 × 28 × 192 × 16 + 28 × 28 × 32 × 5 × 5 × 15 = 1.24 28 \times 28 \times 192 \times 16 + 28 \times 28 \times 32 \times 5 \times 5 \times 15=1.24 28×28×192×16+28×28×32×5×5×15=1.24千万,减少了约90%。

这里的 1 × 1 1 \times 1 1×1的卷积层通常被称作瓶颈层(Bottleneck layer)。借助在网络中合理设计瓶颈层,可以在保持网络性能的前提下显著缩小计算规模。

4.2 完整的Inception网络

Inception 网络 Inception Network

Inception 网络

引入 1 × 1 1 \times 1 1×1卷积后的Inception模块如上所示。注意,为了将所有的输出组合起来,红色的池化层使用Same类型的填充(padding)来池化使得输出的宽高不变,通道数也不变。

多个Inception模块组成一个完整的Inception网络(被称为GoogLeNet,以向LeNet致敬),如下图所示:

Inception 网络

注意,在上图中,Inception网络除了有许多Inception模块(图上红框框出)之外,网络中间隐藏层也可以作为输出层Softmax(图中黑色圈圈出),有利于防止发生过拟合。

经过研究者们的不断发展,Inception模型的V2、V3、V4以及引入残差网络的版本被提出,这些变体都基于Inception V1版本的基础思想上。

5.使用开源的实现方案

使用开源的实现方案 Using Open-source Implementations

很多神经网络结构复杂,且有很多细致的设计和调整,训练过程也包含非常多tricks,很难仅通过阅读论文来重现他人的成果。想要搭建一个同样的神经网络,查看开源的实现方案会快很多。

6.迁移学习

迁移学习 Transfer Learning

在ShowMeAI的前序文章 AI应用实践策略(下) 中我们提到过迁移学习。计算机视觉是一个经常用到迁移学习的领域。在搭建计算机视觉的应用时,相比于从头训练权重,下载别人已经训练好的网络结构的权重,用其做预训练模型,然后转换到自己感兴趣的任务上,有助于加速开发。

对于类似前面提到的VGG/ResNet/Inception等训练好的卷积神经网络,可以冻结住所有层,只训练针对当前任务添加的Softmax分类层参数即可。大多数深度学习框架都允许用户指定是否训练特定层的权重。

冻结的层由于不需要改变和训练,可以看作一个固定函数。可以将这个固定函数存入硬盘,以便后续使用,而不必每次再使用训练集进行训练了。

吴恩达老师指出,上述的做法适用于小数据集场景,如果你有一个更大的数据集,应该冻结更少的层,然后训练后面的层。越多的数据意味着冻结越少的层,训练更多的层。如果有一个极大的数据集,你可以将开源的网络和它的权重整个当作初始化(代替随机初始化),然后训练整个网络。

迁移学习

7.数据扩增

数据扩充 Data Augmentation

计算机视觉领域的应用都需要大量的数据。当数据不够时,数据扩增(Data Augmentation)可以帮助我们构建更多的数据样本。

常用的数据扩增包括镜像翻转、随机裁剪、色彩转换等。如下图为镜像和随机裁剪得到新的图片。

数据扩增

色彩转换是对图片的RGB通道数值进行随意增加或者减少,改变图片色调。另外,PCA颜色增强指更有针对性地对图片的RGB通道进行主成分分析(Principles Components Analysis,PCA),对主要的通道颜色进行增加或减少,可以采用高斯扰动做法来增加有效的样本数量。具体的PCA颜色增强做法可以查阅AlexNet的相关论文或者开源代码。
下图为使用color shifting色调转换进行data augmentation的示例。

数据扩增

在构建大型神经网络的时候,为了提升效率,我们可以使用两个或多个不同的线程并行来实现数据扩增和模型训练。

8.计算机视觉现状

计算机视觉现状 the State of Computer Vision

深度学习需要大量数据,不同的神经网络模型所需的数据量是不同的。目标检测、图像识别、语音识别所需的数据量依次增加。一般来说,如果数据较少,那么就需要对已有数据做更多的手工工程(hand-engineering),比如上一节介绍的数据扩增操作。模型算法也需要特别设计,会相对要复杂一些。

如果数据很多,可以构建深层神经网络,不需要太多的手工工程,模型算法也就相对简单一些。

手工工程(Hand-engineering,又称hacks)指精心设计的特性、网络体系结构或是系统的其他组件。手工工程是一项非常重要也比较困难的工作。在数据量不多的情况下,手工工程是获得良好表现的最佳方式。正因为数据量不能满足需要,历史上计算机视觉领域更多地依赖于手工工程。近几年数据量急剧增加,因此手工工程量大幅减少。

计算机视觉现状

除此之外,在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:

  • 集成(Ensembling):独立地训练几个神经网络,并平均输出它们的输出。
  • 测试阶段数据扩增(Multi-crop at test time):将数据扩增应用到测试集,对结果进行平均。

但是实际工业应用项目会考虑性能效率,上述技巧方法计算和内存成本较大,一般很少使用。

参考资料

ShowMeAI系列教程推荐

推荐文章

吴恩达深度学习笔记——卷积神经网络(CNN) 目录 一、计算机视觉(Computer vision) 二、边缘检测示例(Edge detection example) 三、更多的边缘检测内容(More edge detection) 四、Padding 五、卷积步长(Strided convolution) 六、三维卷积(Convolution over volumes) 七、单层卷积网络(One layer of a c... 阅读详情

相关推荐

花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘1卷积 9. 基本卷积函数的变体 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层 花书+...

今天你学习了吗 2244

5个超实用的深度学习数据集推荐(附下载链接和实战案例)

本文推荐了5个超实用的深度学习数据集,包括CIFAR-10、COCO、KITTI、IMDB-WIKI和LibriSpeech,每个数据集均附有下载链接和实战案例。这些数据集覆盖图像分类、目标检测、自动驾驶、人脸分析和语音识别等多个领域,适合不同层次的深度学习实践者使用,帮助快速入门和提升技能。

vscode6remote的博客 210

花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层

目录 0. 前言 1. 全连接层(fully connected layer) 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层 花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层 花书+吴恩达深度学习(十三)卷积神经网络 CNN ...

今天你学习了吗 1929

《深度学习案例精粹:基于TensorFlow与Keras》深度学习常用训练案例合集

#好书推荐##好书奇遇季#《深度学习案例精粹:基于TensorFlow与Keras》,京东当当天猫都有发售。本书配套示例源码、PPT课件、思维导图、数据集、开发环境与答疑服务。 《深度学习案例精粹:基于TensorFlow与Keras 王晓华 清华大学出版社》【摘要 书评 试读】- 京东图书 (jd.com) 随着深度学习在各个领域获得巨大的成功,科研人员和从业者尝试使用深度学习去解决各种任务。但是由于种种原因,可能在某个应用领域有较高能力的人员,在使用TensorFlow解决其他项目问题时,需要一个示

夏天又到了的专栏 1988

关于深度学习的几个经典案例.pdf

关于深度学习的几个经典案例.pdf

深度学习实战案例解析

本书通过真实案例深入浅出地讲解深度神经网络的核心概念与实现方法,涵盖从基础计算图到卷积、循环网络的完整知识体系。结合TensorFlow框架,引导读者动手实践模型构建、训练优化与误差分析,强化数据预处理、超参数调优等关键技能。内容聚焦实际问题解决,适合希望掌握深度学习应用能力的开发者与研究人员。

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,套用简单

L_goodboy的博客 5万+

小白学电路之cadance搭建buffer电路

Buffer(缓冲器)是一种放大器或驱动电路,主要用于隔离输入和输出,以防止负载对前级电路造成干扰或影响。本文作者在电路方面是小白水平,目前正在学习,有不足之处欢迎指正。3.创建新的cellview,对此buffer进行仿真验证。2.创建buffer的symbol。电路中的V2的详细参数。

weixin_58051657的博客 1992

深度学习教程(1) | 深度学习概论(吴恩达·完整版)

本篇为深度学习系列教程的引言,以房价预测为例,讲解神经网络(Neural Network)模型结构和基础知识,并介绍针对监督学习的几类典型神经网络:Standard NN,CNN和RNN等知识

ShowMeAI研究中心 1万+

CentOS7全隔离环境部署Nvidia Tesla A100 40G驱动与CUDA工具包实战

本文详细介绍了在CentOS7全隔离环境下部署Nvidia Tesla A100 40G显卡驱动与CUDA工具包的实战经验。通过构建本地YUM仓库、解决驱动依赖问题以及三重验证法,确保Tesla A100与CUDA 11.7的完美兼容。同时分享了Anaconda3离线部署技巧,帮助用户在隔离环境中高效搭建Python GPU开发环境。

weixin_27215337的博客 404

什么是深度展开网络?如何将迭代算法的每一次迭代展开成深度网络对应的一层?深度展开网络进行端对端训练,其中端对端是什么意思?

在深度学习和机器学习的背景下,“端到端”(End-to-end)训练指的是将输入数据直接映射到最终输出的过程,而不需要任何中间的手动数据预处理或特征工程。- **自然语言处理**:端到端自然语言处理系统可以将自然语言输入直接转化为计算机可理解的语言输出,而不需要对语言进行分解和转化。- **推荐系统**:通过使用深度神经网络,端到端推荐系统可以直接根据用户历史行为预测其未来的兴趣爱好,并推荐相应的产品或服务。4. **直接映射**:从输入到输出的直接映射,中间没有任何拆分或分解的过程。

m0_67897882的博客 5440

Coursera吴恩达《深度学习》课程总结(全)

01 神经网络和深度学习(Neural Networks and Deep Learning) 1-1 深度学习概论 主要介绍:主要对深度学习进行了简要概述。首先,我们使用房价预测的例子来建立最简单的单个神经元组成的神经网络模型。然后,我们将例子复杂化,建立标准的神经网络模型结构。接着,我们从监督式学习入手,介绍了不同的神经网络类型,包括Standard NN,CNN和RNN。不同的神经网络模型适合处理不同类型的问题。对数据集本身来说,分为结构化数据和非结构化数据。近些年来,深度学习对非结构化数据的处理

csdn_xmj的博客 5万+

C语言 函数

一、什么是函数 二、函数的相关语法 三、函数编码规范

m0_57105760的博客 1891

深度学习教程 | 经典CNN网络实例详解

本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。在ShowMeAI前一篇文章 卷积神经网络解读 中我们对以下内容进行了介绍:本篇内容ShowMeAI展开介绍和总结几个有名的典型CNN案例。这些CNN是最典型和有效的结构,吴恩达老师希望通过对具体CNN模型案例的分析讲解,帮助我们理解CNN并训练实际的模型。本篇涉及到的经典CNN模型包括:手写字体识别模型LeNet5由Yann LeCun教授于90年代提出来,是

weixin_42907150的博客 1762

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9015

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2603

手把手教你搭建卷积神经网络(CNN)

本文是基于吴恩达老师的《深度学习》第四课第一周习题所做,如果本文在某些知识点上描述得不够透彻的可以参见相关章节的具体讲解,同时极力推荐各位有志从事计算机视觉的朋友观看一下吴恩达老师的《深度学习》课程。 1.卷积神经网络构成 总的来说,卷积神经网络与神经网络的区别是增加了若干个卷积层,而卷积层又可细分为卷积(CONV)和池化(POOL)两部分操作(这两个重要概念稍后会简单的介绍,如果对CNN的基...

u013093426的博客 8万+

矢量网络分析仪校准:原理、方法与系统适配性

矢量网络分析仪(VNA)校准是射频测量的关键环节,通过误差建模(12项误差项)和标准件测量,可将系统不确定度从±5dB降至±0.1dB以下。主流校准方法包括SOLT(适用于同轴系统)和TRL(适用于波导系统),二者在标准件、误差重点及频率上限等方面存在显著差异。随着6G与量子通信的发展,动态实时校准将成为新趋势。工程师需根据传输结构、频率范围及精度需求选择合适方法,确保测量精度。

u014344410的博客 263

吴恩达老师深度学习课程完整笔记

为了方便学习深度学习课程,转载一个吴恩达老师的一个深度学习笔记,转载的网站是下面这个 https://blog.youkuaiyun.com/red_stone1/article/details/80207815 从去年8月份开始,AI界大IP吴恩达在coursera上开设了由5们课组成的深度学习专项课程,掀起了一股人工智能深度学习热潮。这里附上deeplearning.ai的官网: deeplearnin...

Miracle8070 6万+

Autosar_MCAL_Port

PORT Driver就是对微控制器(MCU)的整个PORT模块进行初始化配置。很多端口和管脚被分配有多种不同的功能,即可以进行引脚功能复用,比如通用I/O、adc、pwm、spi等功能。因此,对PORT必须有一个整体的配置和初始化,对各管脚的具体配置和使用取决于微控制器和ECU的引脚功能分配。PORT初始化数据应当尽可能高效地写到每个端口。DIO驱动中所用到的端口的配置和初始化都是在PORT驱动模块中完成的。因此,在使用DIO功能之前,应先进行PORT的初始化。1、PortContainer说明。

不断debug,优化中…… 240

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习之卷积神经网络0基础入门学习教程——浅层深度学习(全网最详细,不详细你打我)(看不懂你打我)(对小白没用你打我)

教小白如何快速入门深度学习,快速跑通代码写论文!

爱吃橘子的小翟 4044

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

深度学习教程 | 吴恩达专项课程 · 全套笔记解读

本篇内容是组织的「深度学习原理知识大全」系列教程入口,教程依托吴恩达老师《深度学习专项课程》,对内容做了重新梳理与制作,以更全面和直观的图文方式,对深度学习涉及的知识、模型、原理、应用领域等进行详解......

ShowMeAI研究中心 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

吴恩达《深度学习》笔记汇总

第一门课:神经网络和深度学习(第一周)——深度学习引言 第一门课:神经网络和深度学习(第二周)——神经网络的编程基础 第一门课:神经网络和深度学习(第三周)——浅层神经网络 第一门课:神经网络和深度学习(第四周)——深层神经网络 第二门课:改善深层神经网络:超参数调试、正则化以及优化(第一周)——深度学习的实用层面 第二门课:改善深层神经网络:超参数调试、正则化以及优化(第二周)——优化算法 第二门课:改善深层神经网络:超参数调试、正则化以及优化(第三周)——超参数调试、Batch正则化和程序框架 ....

Taurus 1万+

吴恩达 深度学习 编程作业(4-1)- Convolutional Neural Networks & CNN Application

Part 1:Convolutional Neural Networks: Step by Step Part 2:Convolutional Neural Networks: Application

大树先生的博客 2万+

4-1 Coursera吴恩达《卷积神经网络》 第一周课程笔记-卷积神经网络基础

记录吴恩达Andrew Ng深度学习专项课程笔记,方便之后回顾,共5门课。第一门课《神经网络与深度学习》(Neural Networks and Deep Learning)的4周课程笔记请见如下链接: 1-1 Coursera吴恩达《神经网络与深度学习》第一周课程笔记-深度学习概论 1-2 Coursera吴恩达《神经网络与深度学习》第二周课程笔记-神经网络基础 1-3 Coursera吴恩达《神经网络与深度学习》第三周课程笔记-浅层神经网络 1-4 Coursera吴恩达《神经网络与深度学习》第

csdn_xmj的博客 7593
上一篇: 深度学习教程(13) | CNN应用:人脸识别和神经风格转换(吴恩达·完整版)
下一篇: 深度学习教程(14) | 序列模型与RNN网络(吴恩达·完整版)
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值