新浦京81707con > 功能介绍 > DNN模块的前向传播与反向传播,CNN卷积神经网络

原标题:DNN模块的前向传播与反向传播,CNN卷积神经网络

浏览次数:168 时间:2020-01-23

一、relu层1、前向传播2、反向传播二、dropout层1、dropout职业规律2、在哪儿使用dropout3、dropout的得以完结4、dropout的效率5、python达成dropout的前向传播6、python达成dropout的反向传播三、卷积层1 Im2col2前向传来3反向4小案例四、池化层1、python达成池化层的前向传播2、python完成池化层的反向传播

原稿地址:http://www.jianshu.com/p/1c9daf19b0d9
更加多机器学习、深度学习笔记(含python、TensorFlow代码完毕):http://blog.csdn.net/qq_31456593/article/details/69340697

CNN on TensorFlow

本文超过1/4内容均参照于:

An Intuitive Explanation of Convolutional Neural Networks
博客园:「为什么 ReLU 要好过于 tanh 和 sigmoid function?」
Deep MNIST for Experts
TensorFlow Python API 「tf.nn」

如何在Python中实现ReLU层?

一、前言

卷积神经互联网的发出是为着消除深层神经互联网参数多练习难的标题,并收获越来越好的归类效能。大家明白在深度学习现身以前,古板神经互联网当层数变多时,反向传播将会变得费力,且对于某些高维的输入往往需求一大波的参数,由此复杂神经互连网的练习成了急需消亡的标题。同期,由于全连接互连网提取的前意气风发层的整个音信,全体特点拟合技艺十分的低,且易于过拟合于有些样板。

图片 1

卷积神经互联网的得以完成来源对于视觉神经系统的商讨。化学家开采,人对事物的观看比赛是因而对分歧特点捕获的归结,视觉神经系统中有非常负责差别特色感知的视觉元。从对视觉神经系统的研商出发,神经网络的商量者提议用一个神经元每一次观望输入的片段特征(例如图片的一小块),然后通过慢慢平移的点子观测整个输入的主意,然后用多个这种神经元提取输入的输入的不等特点,最终在经过一个全连接网络对这么些特点举行整合,最后落得分类效果。下图形象的陈说了这种特征的领取。

图片 2

因而多个特征神经吴国替贰个全连接层,我们开掘参数的数据大大减小,且由于图像存在多量风姿罗曼蒂克律的基本特征消息,卷积神经网络在微处理机视觉领域得到了相当好的坚决守护。

Build a Multilayer Convolutional Network

在 TensorFlow 官方的 tutorials 中,大家应用 softmax 模型在 MNIST 数据集上得到的结果独有 91% 的正确率,实在太不好。所以,大家将动用多少个不怎么复杂的模子:CNN(卷积神经网络)来修正实验效果。在 CNN 首要有七个操作:

  1. 卷积
  2. 非线性管理(ReLU)
  3. 池化或然亚采集样板
  4. 分拣(全连接层)

这个操作对于各种卷积神经互连网来讲都以主导组件,因而驾驭它们的行事规律有助于丰富了然卷积神经互联网。上边大家将会尝试掌握各步操作背后的原理。

轻巧易行,relu层正是输入张量通过一个非线性的relu函数,得到输出,而不改良其空间如故深度音信

二、简介

卷积神经网络正是由卷积层、池化层、全连接层构成的享有部分感知和权值共享手艺的深层神经互联网。

图片 3

卷积神经互连网最注重的特征正是一些感知和权值分享。局地感知使其每一次只需感知十分小的区域,减弱了参数数量,也提供了特色拟合技艺(特征简单了,拟合更便于)。而全值分享,使部分基本特征可获得重新利用,使参数能够分享,进步了神经互联网的训练功用。
卷积层: 做特色的领到,输出对应得feature map
池化层: 正是对数据开展下采集样板,缩短数额管理量同一时候保留有用音信
全连接层: 便是对领取特征举行集体综合,输出识别物体的分类景况
关于互连网的印象明白可以见到下图。

图片 4

What's CNN

图片 5图片 6image

三、首要概念

接下去大家来看某些重视概念。

Convolution

卷积的最首要指标是为了从输入图像中领取特征。卷积能够经过从输入的一小块数据中学到图像的风味,并可以保存像素间的空间关系。让大家举个例子来品尝明白一下卷积是哪些管理图像的:

正如小编辈地点所说,每张图像都足以当作是像素值的矩阵。构思一下三个 5 x 5 的图像,它的像素值仅为 0 或然 1(注意对于灰度图像来说,像素值的范围是 0 到 255,上边像素值为 0 和 1 的法国红矩阵仅为特例):

图片 7

而且,思考下另三个 3 x 3 的矩阵,如下所示:

图片 8

接下去,5 x 5 的图像和 3 x 3 的矩阵的卷积能够按下图所示的卡通片相通计算:

图片 9

近期停下来好好精晓下方面包车型地铁揣度是怎么实现的。我们用海螺红的矩阵在本来图像(金红)上海好笑剧团动,每回滑动三个像素(也称之为「步长」),在每一个岗位上,大家总计对应成分的乘积(四个矩阵间),并把乘积的和充任最终的结果,获得输出矩阵(青绿)中的每四个要素的值。注意,3 x 3 的矩阵每便步长中仅能够看看输入图像的一片段。

在 CNN 的术语中,3x3 的矩阵叫做「滤波器」(filter卡塔尔(قطر‎ 或「核」(kernel卡塔尔(قطر‎ 或者「特征检查评定器」(feature detectorState of Qatar,通过在图像上海搞笑剧团动滤波器并总括点乘拿到矩阵叫做「卷积特征」(Convolved Feature卡塔尔 或然 「激活图」(Activation Map卡塔尔(قطر‎ 大概 「特征图」(Feature Map卡塔尔。记住,滤波器在原始输入图像上的作用是特点检测器。

从地方图中的动画能够旁观,对于同大器晚成的输入图像,不一样值的滤波器将会转移差异的性格图。比方,对于上边那张输入图像:

图片 10

在下表中,大家得以看出分歧滤波器对上海教室卷积的作用。正如表中所示,通过在卷积操作前改革滤波矩阵的数值,大家能够进行诸如边缘检查实验、锐化和混淆等操作 —— 那标记分裂的滤波器能够从图中检查测量试验到分化的特点,举例边缘、曲线等。

图片 11

另八个直观领悟卷积操作的好方式是看下边那张图的动画:

图片 12

滤波器(浅伟青框)在输入图像滑过(卷积操作),生成三个特点图。另叁个滤波器(银灰框)在同一张图像上卷积可以拿走二个不如的风味图。注意卷积操作能够从原图上收获局地信任新闻。同不平时间注意这七个分化的滤波器是哪些从同一张图像上调换不一致的特点图。记住上面包车型大巴图像和八个滤波器仅仅是大家地点探究的数值矩阵。

在推行中,CNN 会在教练进度中学习到那么些滤波器的值(就算大家还是亟待在教练前线指挥部定诸如滤波器的个数、滤波器的尺寸、网络构造等参数)。我们运用的滤波器越来越多,提取到的图像特点就更加多,网络所能在鲜为人知图像上识别的情势也就越好。

特征图的尺寸(卷积特征)由上面四个参数调控,大家供给在卷积前明确它们:

  • 深度(Depth):深度对应的是卷积操作所需的滤波器个数。在下图的网络中,我们运用多少个不等的滤波器对本来图像举办卷积操作,那样就可以生成五个不等的特点图。你能够把那七个特征图看作是堆积的 2d 矩阵,那么,特征图的「深度」就是 3。

  • 步长(Stride):宽窄是我们在输入矩阵上海滑稽剧团动滤波矩阵的像素数。当步长为 1 时,我们每回活动滤波器一个像素的职位。当步长为 2 时,大家每一回活动滤波器会跳过 2 个像素。步长越大,将会拿走更加小的特色图。

  • 零填充(Zero-padding):奇迹,在输入矩阵的边缘使用零值举办填充,那样大家就足以对输入图像矩阵的边缘举办滤波。零填充的一大收益是能够让大家决定特征图的轻重。使用零填充的也称之为泛卷积,不适用零填充的号称严谨卷积。

图片 13

从上航海用体育场面能够见见,全部大于0的维持不改变,而小于零的变为零。其余,空间新闻和深度也是平等的

卷积

卷积的面目正是加权叠合。卷积核与三个连接观察窗口的全连接神经元相符,由此我们用它来代表我们上文提到的风味观望神经元,并最后经过窗口滑动观望整个输入,输出八个feature map

ReLU

ReLU表示改过线性单元(Rectified Linear Unit),是贰个非线性操作。

图片 14

  1. 干什么要引入非线性鼓舞函数?

    要是不用激励函数(其实一定于鼓舞函数是 $f(xState of Qatar = x$ ),在这里种情景下您每生龙活虎层输出都以上层输入的线性函数,十分轻巧验证,无论你神经网络有多少层,输出都以输入的线性组合,与未有隐层效果一定,这种景况正是最原始的感知机(Perceptron)了。

    正因为地点的案由,我们决定引入非线性函数作为勉励函数,那样深层神经网络就有含义了(不再是输入的线性组合,能够围拢任性函数)。最先的主张是 sigmoid 函数也许 tanh 函数,输出有界,相当轻松充任下朝气蓬勃层输入(以至部分人的古生物分解balabala)。

  2. 干什么要引进 ReLU 并非其他的非线性函数(举个例子 Sigmoid 函数)?

    • 采用 sigmoid 等函数,算激活函数时(指数运算),总括量大,反向传播求相对误差梯度时,求导涉及除法,计算量相对大,而利用Relu激活函数,整个进程的总结量节省不知凡几。
    • 对此深层互连网,sigmoid 函数反向传播时,非常轻松就汇合世梯度消失的境况(在sigmoid周围饱和区时,转换太缓慢,导数趋于0,这种意况会以致音讯错过),进而不可能产生深层网络的教练。
    • Relu 会使局地神经元的出口为 0,那样就招致了互联网的抛荒性,并且减弱了参数的相互依存关系,减轻了过拟合难点的发出(以至部分人的生物体分解balabala)。

    自然今后也可以有生龙活虎对对 relu 的校勘,举个例子 prelu,random relu等,在差异的数额集上会有局部练习进度上只怕正确率上的改革,具体的能够找相关的paper看。

    (多加一句,未来主流的做法,会多做一步 batch normalization,尽恐怕确认保证每黄金年代层网络的输入具有同等的遍及。而最新的 paper,他们在投入bypass connection 之后,开掘改换 batch normalization 之处会有更加好的作用。)

  3. ReLU 的亮点与劣势?

    优点:

    • 肃清了gradient vanishing难点 (在正区间State of Qatar
    • 算算速度非常快,只必要推断输入是或不是大于0
    • 未有速度远快于sigmoid和tanh

    缺点:

    • ReLU 的出口不是 zero-centered
    • Dead ReLU Problem,指的是一些神经元只怕恒久不会被激活,引致相应的参数永久不能够被更新。有四个关键原因也许产生这种情况时有发生: (1卡塔尔国特别不幸的参数早先化,这种境况超少见 (2卡塔尔(قطر‎ learning rate 太高以致在教练进程中参数更新太大,不幸使互连网步入这种场地。消除办法是能够动用 Xavier 伊始化方法,甚至制止将 learning rate 设置太大或选用adagrad 等机关调整 learning rate 的算法。

二十几年的机械学习发展中,大家产生了那样一个定义:非线性激活函数要比线性激活函数越发进取。

进一层是在分布 Sigmoid 函数的 BP 神经网络,遍布径向基函数的 SVM 神经互连网中,往往有那般的幻觉,非线性函数对非线性网络进献宏大。

该幻觉在 SVM 中尤为严重。核函数的方式并不是完全部是 SVM 能够管理非线性数据的主力功臣(帮助向量充任着隐层剧中人物)。

那么在深度互联网中,对非线性的依附程度就能够缩风华正茂缩。此外,在上一些事关,抛荒特征并无需互连网具备很强的拍卖线性不可分机制。

综述上述两点,在深度学习模型中,使用轻易、速度快的线性激活函数大概进一层适宜。

ReLU 操作能够从下边包车型地铁图中级知识分子道。这里的出口特征图也得以用作是“改过”过的特点图。

图片 15

所谓麻雀虽小,麻雀虽小,ReLU虽小,但也是足以改过的。

relu函数作为激活函数,具备以下职能:

黄金时代维卷积

图片 16

图中的M向量为卷积核,N向量为输入,P向量为出口。在那之中P[2] = N[0] * M[0] ... N[4] * M[4]。
因为图疑似二维的,所以大家用到的相仿是上面包车型客车二维卷积

ReLU的种类

ReLU的区分首要在负数端,根据负数端斜率的不等来张开区分,大致如下图所示。

图片 17

平日的ReLU负数端斜率是0,Leaky ReLU则是负数端有叁个超级小的斜率,而PReLU则是在后向传来中上学到斜率。而Randomized Leaky ReLU则是选取二个均匀布满在教练的时候随机生成斜率,在测验的时候使用均值斜率来测算。

  1. 轻松计算,选用sigmoid函数作为激活函数时候,计算量大,反向传播求相对误差梯度时,求导涉及除法,总括量相当大,而选用Relu激活函数,整个经过的总计量节省无尽。

  2. 纵深模型中受消失梯度的影响要小得多,对于深层互连网,sigmoid函数反向传来时,非常轻易就涌出梯度消失的景观(在sigmoid函数左近饱和区时,调换太缓慢,导数趋于0,这种场合会促成新闻错失),进而不能够到位深层互联网的教练。

  3. 生机勃勃经您接收大的学习率,他们也许会不可幸免地死去,因为当一个老大大的梯度流过三个ReLU 神经元,更新过参数之后,这几个神经元再也不会对别的数占领激活现象了。那么些神经元的梯度将一贯都以0了。

二维卷积

图片 18

卷积层中卷积核的运用,常常如上海体育场所所示。卷积层是卷积核在上一流输入层上通过逐个滑动窗口总计而得,卷积核中的每二个参数都相当于守旧神经互联网中的权值参数,与相应的某个像素相连接,将卷积核的顺序参数与相应的局部像素值相乘之和,(日常还要再加上二个偏置参数),获得卷积层上的结果(即feature map)。

效果

其间,NDSB 数据集是 Kaggle 的较量,而 MuranoReLU 就是在这里次竞技后出一头地的。

图片 19

因此上述结果,能够观看四点:

  • 对于 Leaky ReLU 来讲,假使斜率十分小,那么与 ReLU 并未大的例外,当斜率大学一年级部分时,效果就好过多。
  • 在教练集上,PReLU 往往能达到规定的规范最小的错误率,表达 PReLU 轻松过拟合。
  • 在 NSDB 数据集上 汉兰达ReLU 的进级比 cifar10 和 cifar100 上的升迁尤为明朗,而 NSDB 数据集相当的小,进而得以印证,EvoqueReLU在与过拟合的胶着中更为使得。
  • 对于 兰德陆风X8ReLU 来讲,还亟需探讨一下随机化得斜率是何等影响练习和测验进度的。

1、前向传播

多通道三个卷积核的卷积总结

上边是3通路(CR-VGB),2个卷积核的思考进度。

图片 20

  • 右边手是输入(773中,7*7意味着图像的像素/长度宽度,3代表PRADO、G、B 三个颜色通道)
  • 中间部分是五个例外的滤波器Filterw0、Filter w1
  • 最侧边则是八个分裂的输出(即2个feature map,该隐藏层深度为2,提取2类特征)
    乘势左边数据窗口的位移滑动,卷积核Filter w0 / Filter w1对不一样的部分数据开展卷积计算。个中各个卷积核有3个3*3的矩阵分别与与七个通道的观看窗口做卷积最终求和作为出口。
    卷积核的权重矩阵就是教练时要上学的,它正是要提取的表征,神经互连网再依靠卷积提取的性状去考察输入(比方图片)

参照他事他说加以调查文献

[1]. Xu B, Wang N, Chen T, et al. Empirical evaluation of rectified activations in convolutional network[J]. arXiv preprint arXiv:1505.00853, 2015.

将具备小于0的数形成0,大于0的数保持不改变,空间和深度新闻保险不改变。

Relu激活函数

最近来卷积神经网络中,激活函数往往不接收sigmoid或tanh函数,而是精选relu函数。Relu函数的概念是:$f(x卡塔尔国= max(0,xState of Qatar$
Relu函数图像如下图所示:

图片 21

Relu函数作为激活函数,有上面几大优势:

  • 进度快 和sigmoid函数须求总括指数和尾数比较,relu函数其实便是一个max(0,x卡塔尔国,计算代价小超多。
  • 减轻梯度消失难点 回想计算梯度的公式$nabla=sigma'delta x$。其中,$sigma'$是sigmoid函数的导数。在利用反向传播算法举办梯度计算时,每经过黄金年代层sigmoid神经元,梯度就要乘上八个$sigma'$。从下图能够见见,$sigma'$函数最大值是55%。因而,乘叁个会促成梯度更加小,那对于深层网络的教练是个异常的大的主题素材。而relu函数的导数是1,不会导致梯度变小。当然,激活函数仅仅是以致梯度压缩的一个要素,但无论怎么着在这里地方relu的表现强于sigmoid。使用relu激活函数能够让您演练更加深的网络。
  • 荒凉性 通过对大脑的研究开掘,大脑在做事的时候独有大约5%的神经细胞是激活的,而选取sigmoid激活函数的人工神经网络,其激活率大概是百分之八十。有舆论声称人工神经互联网在15%-百分之四十的激活率时是相比较理想的。因为relu函数在输入小于0时是截然不激活的,因而得以赢得三个更低的激活率

Pooling

空中池化(Spatial Pooling)(也叫做亚选取或然下采集样本)降落了逐生机勃勃特征图的维度,但足以保持好多人命关天的新闻。空间池化有上边三种办法:最大化、平均化、加和等等。

对此最大池化(Max Pooling),大家定义一个上空邻域(比方,2x2 的窗口),并从窗口内的校正特征图中抽出最大的要素。除了取最轮廓素,大家也足以取平均(Average Pooling)可能对窗口内的因素求和。在骨子里中,最大池化被证时效果越来越好有的。

下边包车型地铁图展现了选择 2x2 窗口在改正特征图(在卷积 ReLU 操作后拿走)使用最大池化的事例。

图片 22

大家以 2 个成分(也称为“步长”)滑动大家 2x2 的窗口,并在各个地区内取最大值。如上海教室所示,这样操作能够减低我们特征图的维度。

在下图显示的网络中,池化操作是分开使用到各种特征图的(注意,因为这么的操作,大家能够从多少个输入图中获取四个出口图)。

图片 23

下图展现了我们在 ReLU 操作之后获得的修正特征图的池化操作的机能:

图片 24

池化函数能够逐步回降输入表示的空间尺度。特别地,Pooling 的好处是:

  • 使输入表示(特征维度)变得越来越小,况兼互联网中的参数和计量的数量更是可控的滑坡,因而,能够操纵过拟合。

  • 使互连网对于输入图像中更小的变化、冗余和转移变得不改变性(输入的微薄冗余将不会改动池化的出口——因为大家在有个别邻域中运用了最大化/平均值的操作)。

  • 帮忙大家得到图像最大程度上的标准化不改变性(精确的词是“不变性”)。它那么些的不战而屈人之兵,因为大家能够检查实验图像中的物体,无论它们地方在何地。

到近来停止大家询问了卷积、ReLU 和池化是什么操作的。领悟这个层是构建狂妄CNN 的底蕴是很主要的。正如下图所示,大家有两组卷积、ReLU & 池化层 —— 第二组卷积层使用三个滤波器对第生龙活虎组的池化层的输出继续卷积,得到生龙活虎共多个特征图。接下来对富有三个特征图应用 ReLU。接着大家对八个改良特征图分别张开最大池化操作。

这几个层一同就足以从图像中提取有用的风味,并在网络中引进非线性,降低特征维度,同一时间保险那个特点具备某种程度上的准则变化不改变性。

图片 25

第二组池化层的出口作为全连接层的输入,接下去大家将介绍全连接层。

python达成relu的前向传来:

四、互联网结构

图片 26

  • 最侧边是数据输入层
    对数码做一些甩卖,比方去均值(把输入数据各样维度都基本化为0,防止数据过多偏差,影响练习效果)、归生机勃勃化(把装有的数量都归生机勃勃到相符的范围)、PCA/白化等等。CNN只对教练集做“去均值”这一步。
  • 中间是
    CONV:卷积层,线性乘积 求和。
    RELU:鼓舞层,使用relu做卷积层的激活函数。
    POOL:池化层,简言之,即取区域平均或最大。
  • 最右边是
    FC:全连接层
    于是现身这么多区别的叙说卷积神经互连网的图是为了鲁人持竿地赞助大家领会其互联网布局。

Connect

全连接层是思想的多层感知器,在输出层使用的是 softmax 激活函数(也得以行使其余像 SVM 的分类器,但在本文中只使用 softmax)。「全连接」(Fully Connected卡塔尔国这么些词注解后面层的享有神经元都与下生机勃勃层的富有神经元连接。

卷积和池化层的输出表示了输入图像的高端级特征。全连接层的目标是为着利用那些特色把输入图像基于练习多少集进行分类。比如,在上面图中大家开展的图像分类有八个大概的输出结果(注意下图并不曾出示全连接层的节点连接)。

图片 27

除此而外分类,增加叁个全连接层也(日常)是上学这个特色的非线性组合的简易方法。从卷积和池化层获得的大部风味大概对分类职分使得,但那几个特色的结合恐怕会越来越好。

从全连接层得到的输出概率和为 1。这些能够在输出层使用 softmax 作为激活函数进行政管理教。softmax 函数输入叁个随机大于 0 值的矢量,并把它们调换为零一之间的数值矢量,其和为少年老成。

图片 28

卷积层

图片 29

卷积核就算模拟的是八个特色观看神经元,但它并不归于卷积层,它一定于一个表征过滤器(或视为三个权重矩阵)。它将相符本身必要的特征输出到feature map上。
关于卷积层为啥能够提取特征并拿走很好的职能,能够看下边表示特征的卷积核与输入图片展开演算后领取的feature map

图片 30

可以见见分裂卷积核将提取图片中分歧的特征,日常第生龙活虎层提取的都以边、角、色彩强度等低维的个性。正如下图

图片 31

下一场几个卷积层对特色进行领取和整合后,就能够博得相比复杂的特点

图片 32

Use Backpropagation to Train whole network

正如上边商量的,卷积 池化层的据守是从输入图像中提取特征,而全连接层的效果是分类器。

瞩目在底下的图中,因为输入的图像是船,对于船这风度翩翩类的靶子可能率是 1,而任何三类的对象可能率是 0,即

  • 输入图像 = 船

  • 对象矢量 = [0, 0, 1, 0]

    图片 33

全部的卷积互联网的教练进程能够总计如下:

  • 先是步:大家初阶化全数的滤波器,使用随机值设置参数/权重
  • 第二步:互连网收到一张锻练图像作为输入,通过前向传来进度(卷积、ReLU 和池化操作,以致全连接层的前向传来),找到各类类的输出概率
    • 小编们倘使船那张图像的输出概率是 [0.2, 0.4, 0.1, 0.3]
    • 因为对于第一张演习样品的权重是任性分配的,输出的可能率也是随便的
  • 其三步:在输出层计算总绝对误差(总结 4 类的和)

    • Total Error = ∑ ½ (target probability – output probability) ²
  • 第四步:使用反向传播算法,依据互联网的权重计算模型误差的梯度,并行使梯度下跌算法更新具备滤波器的值/权重以致参数的值,使出口相对误差最小化

    • 权重的改革与它们对总抽样误差的占比有关
    • 当同样的图像再一次作为输入,这时候的输出可能率大概会是 [0.1, 0.1, 0.7, 0.1],那就与指标矢量 [0, 0, 1, 0] 更近似了
    • 那标识网络已经经过调解权重/滤波器,可以正确对这张特定图像的分类,那样输出的抽样误差就减小了
    • 像滤波器数量、滤波器大小、网络构造等如此的参数,在首先步前都以定位的,在教练过程中维系不改变——仅仅是滤波器矩阵的值和连接权重在更新
  • 第五步:对教练多少中兼有的图像重复步骤 1 ~ 4

上边的那一个手续能够训练 ConvNet —— 那实质上象征对于教练多少汇总的图像,ConvNet 在更新了全部权重和参数后,已经优化为能够对这一个图像进行不易分类。

当一张新的(未见过的)图像作为 ConvNet 的输入,网络将会另行展开前向传来进程,并出口各类品类的概率(对于新的图像,输出可能率是使用已经在前面锻练样品上优化分类的参数进行测算的)。借使大家的训练数据集一点都相当的大,互联网将会(有望)对新的图像有很好的泛化,并把它们分到精确的花色中去。

注 1: 下边包车型客车步子已经简化,也制止了数学详细情形,只为提供练习进度的直观内容。

注 2:在上头的例子中我们利用了两组卷积和池化层。可是请深深记住,那几个操作能够在二个ConvNet 中重新数次。实际上,现在多少表现最佳的 ConvNet 具备多达十几层的卷积和池化层!同有时间,每一趟卷积层前边不自然要有池化层。如下图所示,大家能够在池化操作前三番两次使用四个卷积

  • ReLU 操作。还应该有,请留神 ConvNet 的各层在下图中是怎么着可视化的。

图片 34

2、反向传播

relu层

我们这里临时把激励函数relu也当做风流洒脱层,卷积后增加relu激励函数有

图片 35

Visualization on CNN

诚如来说,越多的卷积步骤,网络能够学到的鉴定分别特征就越复杂。比方,ConvNet 的图像分类大概在首先层从原始像素中检查评定出边缘,然后在其次层使用边缘检查测验大概的形状,接着使用那一个造型检查实验越来越尖端的性格,举个例子越来越高层的人脸。上边包车型地铁图中突显了那几个剧情——大家使用卷积深度置信网络学学到的风味,那张图仅仅是用来表明上边的从头到尾的经过(那只是是三个事例:真正的卷积滤波器恐怕会检查实验到对大家聊无意义的实体)。

图片 36

Adam Harley 创立了一个卷积神经互联网的可视化结果,使用的是 MNIST 手写数字的练习集。作者生硬建议使用它来精晓 CNN 的干活规律。

我们得以在下图中看见网络是何许鉴定分别输入 「8」 的。注意下图中的可视化并未独自展现 ReLU 操作。

图片 37

输入图像包括 1024 个像素(32 x 32 大小),第三个卷积层(卷积层 1)由三个非凡的 5x5 (步长为 1)的滤波器组成。如图可以看见,使用两个不一致的滤波器拿到叁个深度为六的风味图。

卷积层 1 背后是池化层 1,在卷积层 1 得到的三个特征图上独家开展 2x2 的最大池化(步长为 2)的操作。你可以在池化层上把鼠标移动到大肆的像素上,观察在前头卷积层(如上海教室所示)得到的 4x4 的小格。你会发觉 4x4 小格中的最大值(最亮)的像素将会进来到池化层。

图片 38

池化层 1 背后的是八个 5x5 (步长为 1)的卷积滤波器,进行卷积操作。后边正是池化层 2,举办 2x2 的最大池化(步长为 2)的操作。这两层的定义和前面描述的雷同。

接下去我们就到了七个全连接层。它们是:

  • 首先个全连接层有 120 个神经元
  • 其次层全连接层有 100 个神经元
  • 其八个全连接层有 10 个神经元,对应 10 个数字——也就做输出层

注目的在于下图中,输出层中的 10 个节点的次第都与第三个全连接层的装有 100 个节点相连(由此称为全连接)。

况兼,注意在输出层那多个唯意气风发的亮的节点是什么样对应于数字 “8” 的——那评释网络把我们的手写数字正确分类(越亮的节点申明从它得到的输出值越高,即,8 是颇负数字中概率最高的)。

图片 39

相通的 3D 可视化能够在这里看到。

在前向传来的时候,我们对各种输入X=[x1,x2,x3]使用了max函数,所以在反向传来的时候,小于0的要素,梯度dx等于0:

池化层

图片 40

池化层里大家用的maxpooling,将重大特征保留,舍去多余无用特色,这样就足以兑现音讯压缩,比方下图所示

图片 41

由此多轮的卷积和池化,将得到终极的性状表示

图片 42

Other ConvNet

卷积神经互连网从上世纪 90 时期开始时代开首现身。大家地方提到的 LeNet 是最早卷积神经网络之意气风发。其余有分明影响力的布局如下所示:

  • LeNet (1989s卡塔尔: 本文已介绍。
  • 1990s to 二〇一二:在上世纪 90 时代最后一段时期至 二零零六年中期,卷积神经互联网步向孵化期。随着数据量和总括才具的日趋发展,卷积神经网络能够拍卖的主题材料变得更其有意思。
  • 亚历克斯Net (二〇一二卡塔尔(قطر‎ – 在 二〇一一,Alex Krizhevsky (与其外人)发表了 AlexNet,它是比 LeNet 更加深更加宽的本子,并在 2013 年的 ImageNet 大面积视觉识别大赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)中以硬汉优势获胜。那对于早前的措施具备宏大的突破,当前 CNN 大规模的运用也是基于这几个工作。
  • ZF Net (二零一一卡塔尔国 – ILSVRC 二〇一一 的获胜者是根源 Matthew Zeiler 和 RobFergus 的卷积神经网络。它以 ZFNet (Zeiler & Fergus Net 的缩写)盛名。它是在 亚历克斯Net 构造超参数上扩充调治得到的效果进步。
  • GoogLeNet (二零一六卡塔尔(قطر‎ – ILSVRC 2015 的胜球者是缘于于 Google 的 Szegedy等人的卷积神经网络。它的严重性贡献在于采纳了一个英斯ption 模块,能够大大方方调整和裁减网络的参数个数(4M,亚历克斯Net 有 60M 的参数)。
  • VGGNet (二零一六卡塔尔国 – 在 ILSVRC 2016 的抢先者中有一个 VGGNet 的网络。它的重大进献是显得了网络的深浅(层数)对于质量有所异常的大的影响。
  • ResNets (2015) – 残差网络是何凯明(和别的人)开垦的,并拿到ILSVRC 二〇一五 的季军。ResNets 是当前卷积神经网络中最棒的模型,也是进行中应用 ConvNet 的暗中认可选项(停止到 二〇一四 年八月)。
  • DenseNet (二零一五 九月卡塔尔国 – 如今由 Gao Huang (和其余人)发布的,the Densely Connected Convolutional Network 的各层都一向于别的层早先向的不二秘籍连接。DenseNet 在两种竞争积攒的靶子识别基准任务中,比原先最棒的布局有分明的升官。能够在这里看 Torch 实现。

python完毕relu 反向传播:

全连接层

谈到底用全连接层对特色实行拟合

图片 43

并出口分裂分类的概率

图片 44

那就是卷积神经互连网获得特征并促成图像分类的总体经过,通过那么些历程,大家应该也对卷积神经互连网的布局有了比较深远周详的刺探。

CNN on TensorFlow

Tensorflow 在卷积和池化上有很强的油滑。大家改什么管理边界?步长应该设多大?在这里个实例里,大家会直接使用 vanilla 版本。大家的卷积网络选择步长(stride size)为 1边距(padding size)为 0 的模板,保险输出和输入是同一个高低(严俊卷积)。大家的池化选拔轻便古板的 $2 times 2$ 大小的模板作为 max pooling(最大池化)。为了使代码更简单,大家把那有的抽象成三个函数:

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides = [1, 1, 1, 1], padding = 'SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize = [1, 2, 2, 1], strides = [1, 2, 2, 1], padding = 'SAME')

图片 45

五、应用

几个卓绝的神经网络应用如下

  • LeNet,那是最初用起来的卷积神经网络,Yann LeCun在散文LeNet提到。
  • 亚历克斯Net,贰零壹贰ILSVRC比赛远超第2名的卷积神经互联网,和LeNet的构造比较像,只是更加深,同有的时候候用多层小卷积层叠合提到大卷积层。
  • ZF Net,2012 ILSVRC比赛亚军,可以参考散文ZF Net
  • GoogLeNet,2014 ILSVRC比赛季军,谷歌(Google卡塔尔发表的随想Going Deeper with
    Convolutions有具体介绍。
  • VGGNet,也是2014ILSVRC竞技后的模型,有趣的是,固然那么些模型那时候在分拣难点上的效用,略差于google的GoogLeNet,但是在无数图像转变学习难点(比如object detectionState of Qatar上效率奇好,它也认证卷积神经网的『深度』对于最终的功力有根本的功力。预练习好的模型在pretrained
    model site能够下载。

Convolution Layer on TensorFlow

卷积操作是应用三个二维的卷积核在二个批处理的图样上进行不断扫描。具体操作就是将多少个卷积和在每张图片上遵从一个正好的尺寸在各样通道上边举行围观。为了实现更加好的卷积功用,须要在分化的前程似锦和分裂的卷积核之间开展衡量。

  • conv2d:放肆的卷积核,能何况在差异的平坦大路上边举办卷积操作。
  • depthwise_conv2d:卷积核能相互独立地在友好的坦途上边进行卷积操作。
  • separable_conv2d:在深度卷积 depthwise filter 之后展开逐点卷积 separable filter

小心:纵然这么些操作被称呼「卷积」操作,然而严谨地以来,他们只是互相关,因为卷积核未有做多个逆向的卷积进程。

卷积核的卷积进程是根据 strides 参数来显著的,比方 strides = [1, 1, 1, 1] 表示卷积核查每一种像素点实行卷积,即在二维显示器方面,多个轴方向的上升的幅度都是1。strides = [1, 2, 2, 1]表示卷积核查每间距二个像素点进行卷积,即在二维荧屏方面,两个轴方向的幅度都是2。

尽管大家暂不考虑通道这些元素,那么卷积操作的上空含义定义如下:若是输入数据是四个四维的 input ,数据维度是[batch, in_height, in_width, ...],卷积核也是四个四维的卷积核,数据维度是[filter_height, filter_width, ...],那么,对于出口数据的维度 shape(output),那有赖于填充参数padding 的设置:

  • padding = 'SAME':向下抉择,仅适用于全尺寸操作,即输入数据维度和输出数据维度相符。

    out_height = ceil(float(in_height) / float(strides[1]))
    out_width  = ceil(float(in_width) / float(strides[2]))
    
  • padding = 'VALID':向上取舍,适用于有个别窗口,即输入数据维度和出口数据维度不相同。

    out_height = ceil(float(in_height - filter_height   1) / float(strides[1]))
    out_width  = ceil(float(in_width - filter_width   1) / float(strides[2]))
    
output[b, i, j, :] = 
          sum_{di, dj} input[b, strides[1] * i   di, strides[2] * j   dj, ...] * 
                   filter[di, dj, ...]

因为,input多少是二个四维的,每三个坦途下面是叁个向量input[b, i, j, :]。对于conv2d ,那些向量会被卷积核filter[di, dj, :, :]相乘而发出二个新的向量。对于depthwise_conv_2d,各种标量分量input[b, i , j, k]将在 k 个通道上边独立地被卷积核 filter[di, dj, k]举行卷积操作,然后把富有获得的向量进行连续组合成三个新的向量。


02

参照他事他说加以侦查资料

卷积神经互联网:http://blog.csdn.net/stdcoutzyx/article/details/41596663
cs231n 卷积神经网络:http://cs231n.github.io/convolutional-networks/
cnn笔记通俗明了卷积神经互联网:http://blog.csdn.net/v_july_v/article/details/51812459
卷积神经互联网工作原理直观的解说?:https://www.zhihu.com/question/39022858
CNN入门安详严整及TensorFlow源码落成--深度学习笔记:http://blog.csdn.net/qq_31456593/article/details/71108257
[透析] 神经互联网如何行事(录制):https://www.youtube.com/embed/FmpDIaiMIeA
卷积神经网络:https://www.zybuluo.com/hanbingtao/note/485480

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

本条函数的职能是对多个四维的输入数据 input 和四维的卷积核 filter 实行操作,然后对输入数据进行三个二维的卷积操作,最终收获卷积之后的结果。

加以的输入 tensor 的维度是 [batch, in_height, in_width, in_channels],卷积核 tensor 的维度是[filter_height, filter_width, in_channels, out_channels],具体卷积操作如下:

  • 将卷积核的维度转换到贰个二维的矩阵形状[filter_height * filter_width* in_channels, output_channels]
  • 对于每一个批管理的图样,大家将输入 tensor 调换来三个不时的数量维度 [batch, out_height, out_width, filter_height * filter_width * in_channels]
  • 对此各类批管理的图片,我们右乘以卷积核,获得终极的出口结果。

越是切实的象征细节为,要是接收私下认可的 NHWC data_format形式:

output[b, i, j, k] =
    sum_{di, dj, q} input[b, strides[1] * i   di, strides[2] * j   dj, q] *
                    filter[di, dj, q, k]

之所以大家注意到,应当要有strides[0] = strides[3] = 1。在大多数管理进度中,卷积核的档期的顺序位移步数和垂直运动步数是平等的,即strides = [1, stride, stride, 1]

行使例子:

import numpy as np
import tensorflow as tf

input_data = tf.Variable(np.random.rand(10, 6, 6, 3), dtype = np.float32)
filter_data = tf.Variable(np.random.rand(2, 2, 3, 1), dtype = np.float32)

y = tf.nn.conv2d(input_data, filter_data, strides = [1, 1, 1, 1], padding = 'SAME')

with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print(sess.run(y))
    print(sess.run(tf.shape(y)))

输入参数:

  • input: 一个 Tensor。数据类型必需是 float32 或者 float64
  • filter: 一个 Tensor。数据类型必得是input相同。
  • strides: 一个长度是 4 的大器晚成维整数类型数组,每黄金年代维度对应的是 input 中每生机勃勃维的应和移动步数,比如,strides[1] 对应 input[1] 的活动步数。
  • padding: 叁个字符串,取值为 SAME 或者 VALID
  • use_cudnn_on_gpu: 二个可选布尔值,暗中认可景况下是 True
  • data_format:叁个可选stringNHWC 或者NCHW。默许是用NHWC 。主借使规定了输入 tensor 和出口 tensor 的四维情势。假诺利用 NHWC ,则数据以 [batch, in_height, in_width, in_channels]仓库储存;借使使用NCHW,则数据以[batch, in_channels, in_height, in_width]存储。
  • name: (可选)为那些操作取叁个名字。

出口参数:

  • 一个 Tensor,数据类型是 input 相同。

Dropout是大器晚成种用于幸免神经互连网过度拟合的本领,你还足以选用L2正则化幸免过拟合。

Pooling Layer on TensorFlow

池化操作是使用贰个矩阵窗口在输入张量上海展览中心开扫描,何况将各类矩阵窗口中的值通过取最大值,平均值只怕其余方法来压缩成分个数。每种池化操作的矩阵窗口大小是由 ksize 来内定的,并且根据步长参数 strides 来决定活动步长。举个例子,即便 strides 中的值都是1,那么每一个矩阵窗口都将被运用。借使 strides 中的值都以2,那么每风度翩翩维度上的矩阵窗口都以每间距叁个被采取。就那样类推。

更实际的输出结果是:

output[i] = reduce( value[ strides * i: strides * i   ksize ] )

输出数据维度是:

shape(output) = (shape(value) - ksize   1) / strides

个中,取舍方向在于参数 padding

  • padding = 'SAME': 向下抉择,仅适用于全尺寸操作,即输入数据维度和输出数据维度相符。
  • padding = 'VALID: 向上取舍,适用于有个别窗口,即输入数据维度和输出数据维度分歧。

图片 46image

tf.nn.avg_pool(value, ksize, strides, padding , data_format='NHWC', name=None)

其风华正茂函数的效果是简政放权池化区域十十二月素的平均值。

运用例子:

import numpy as np
import tensorflow as tf

input_data = tf.Variable( np.random.rand(10,6,6,3), dtype = np.float32 )
filter_data = tf.Variable( np.random.rand(2, 2, 3, 10), dtype = np.float32)

y = tf.nn.conv2d(input_data, filter_data, strides = [1, 1, 1, 1], padding = 'SAME')
output = tf.nn.avg_pool(value = y, ksize = [1, 2, 2, 1], strides = [1, 1, 1, 1], padding = 'SAME')

with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print(sess.run(output))
    print(sess.run(tf.shape(output)))

输入参数:

  • value: 多个四维的Tensor。数据维度是 [batch, height, width, channels]。数据类型是float32float64qint8quint8qint32
  • ksize: 三个尺寸超大于 4 的整型数组。每一种人方面包车型大巴值对应于输入数据张量中每豆蔻梢头维的窗口对应值。
  • strides: 叁个尺寸不低于 4 的整型数组。该参数钦定滑动窗口在输入数据张量每风华正茂维上面的升幅。
  • padding: 贰个字符串,取值为 SAME 或者 VALID
  • data_format:二个可选stringNHWC 或者NCHW。暗许是用NHWC 。首即使规定了输入 tensor 和输出 tensor 的四维格局。要是选用 NHWC ,则数据以 [batch, in_height, in_width, in_channels]存储;若是利用NCHW,则数据以[batch, in_channels, in_height, in_width]存储。
  • name: (可选)为那个操作取二个名字。

输出参数:

  • 四个Tensor,数据类型和value相近。

下边是分类的错误率,能够开掘使用了dropout之后错误率更低:

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

本条函数的作用是总括 pooling 区域瓜时素的最大值。


图片 47image

tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None)

本条函数的职能是计算池化区域兰秋素的最大值和该最大值所在之处。

因为在测算地方 argmax 的时候,我们将 input 铺平了开展估测计算,所以,假使 input = [b, y, x, c],那么索引地点是 `( ( b * height y ) * width x ) * channels c

查看源码,该API只好在GPU景况下行使,所以自个儿从不测量检验上边包车型客车选用例子,即使您能够测量检验,请报告本人前后相继是或不是足以运作。

源码显示:

REGISTER_KERNEL_BUILDER(Name("MaxPoolWithArgmax")
                            .Device(DEVICE_GPU)
                            .TypeConstraint<int64>("Targmax")
                            .TypeConstraint<float>("T"),
                        MaxPoolingWithArgmaxOp<Eigen::GpuDevice, float>);
REGISTER_KERNEL_BUILDER(Name("MaxPoolWithArgmax")
                            .Device(DEVICE_GPU)
                            .TypeConstraint<int64>("Targmax")
                            .TypeConstraint<Eigen::half>("T"),
                        MaxPoolingWithArgmaxOp<Eigen::GpuDevice, Eigen::half>);

应用例子:

import numpy as np
import tensorflow as tf

input_data = tf.Variable( np.random.rand(10,6,6,3), dtype = tf.float32 )
filter_data = tf.Variable( np.random.rand(2, 2, 3, 10), dtype = np.float32)

y = tf.nn.conv2d(input_data, filter_data, strides = [1, 1, 1, 1], padding = 'SAME')
output, argmax = tf.nn.max_pool_with_argmax(input = y, ksize = [1, 2, 2, 1], strides = [1, 1, 1, 1], padding = 'SAME')

with tf.Session() as sess:
    init = tf.initialize_all_variables()
    sess.run(init)
    print(sess.run(output))
    print(sess.run(tf.shape(output)))

输入参数:

  • input: 三个四维的Tensor。数据维度是 [batch, height, width, channels]。数据类型是float32
  • ksize: 叁个长短不低于 4 的整型数组。每一人地点的值对应于输入数据张量中每风度翩翩维的窗口对应值。
  • strides: 一个长度不低于 4 的整型数组。该参数钦点滑动窗口在输入数据张量每后生可畏维上边包车型大巴肥瘦。
  • padding: 一个字符串,取值为 SAME 或者 VALID
  • Targmax: 二个可选的数据类型: tf.int32 或者 tf.int64。默许情形下是 tf.int64
  • name: (可选)为这么些操作取三个名字。

出口参数:

二个元祖张量 (output, argmax)

  • output: 一个Tensor,数据类型是float32。表示池化区域的最大值。
  • argmax: 一个Tensor,数据类型是Targmax。数据维度是四维的。

和别的正则化工夫同样,使用dropout会使得操练损失稍微恶化,可是模型的泛化工夫却越来越好,因为假若大家的模子过于复杂(越多层也许更加的多神经元),模型就很可能过拟合,下边是教练和注脚集上的损失景况,以至她们中有无dropout情状。

Weight Initialization

于是,为了制造那一个模型,大家须要成立大气的权重和偏置项,这么些模型中的权重在初步化的时候理应投入一些些的噪音来打破对称性以致幸免0 梯度。由于大家应用的是 ReLU 神经元,由此比较好的做法是用三个超级小的正数来初始化偏置项,以制止神经元节点输出恒为 0 的主题材料(dead neurons)。为了不再建模的时候往往做早先化操作,大家定义多个函数用于发轫化。

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides = [1, 1, 1, 1], padding = 'SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize = [1, 2, 2, 1], strides = [1, 2, 2, 1], padding = 'SAME')

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev = 0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape = shape)
    return tf.Variable(initial)

图片 48image

第一层

接下去,大家起头兑现率先层。它由一个卷积层接二个 max_pooling 最大池化层完毕。卷积在各个 5x5 的 patch 中算出 三十八个特征。卷积的权重张量形状是 [5, 5, 1, 32],前四个维度是 patch 的大小,接着是输入的大道数目,最终是出口的大道数目。而对此每叁个出口通道都有二个相应的偏置量。

W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])

为了用那意气风发层,大家把 x 产生二个 4d 的向量,其第 2、第 3 维对应图片的升幅、高度,最终一个人代表图片的颜料通道(因为是灰度图,所以这里的通道数为 1,假设是 RBG 彩色图,则为 3)。

x_image = tf.reshape(x, [-1, 28, 28, 1])

之后,我们把 x_image 和权值向量进行卷积,加上偏置项,然后利用 ReLU 激活函数,最后进行 max pooling。

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1)   b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

1、dropout工作规律

第二层

为了创设一个越来越深的互联网,大家会把多少个近乎的层堆积起来。第二层中,各个 5x5 的 patch 会获得 64 天性状。

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2)   b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

在教练时期,随机的精选自然比重的神经细胞,让它结束专门的学业,如下图所示,那样泛化技术更加好,因为你的网络层的不等的神经细胞会学习肖似的“概念”。在测验阶段,无需利用dropout.

密集连接层

近期,图片尺寸减小到 7x7,我们投入二个有 10二十多个神经元的全连接层,用于拍卖任何图片。我们把池化层输出的张量 reshape 成一些向量,乘上权重矩阵,加上偏置,然后对其使用 ReLU。

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1)   b_fc1)

图片 49

Dropout

为了变少过拟合,大家在输出层早前参加dropout。大家用叁个 placeholder 来表示叁个神经元的出口在 dropout 中保持不改变的可能率。那样大家得以在教练进程中启用 dropout,在测量检验进程中关闭 dropout。 TensorFlow 的tf.nn.dropout 操作除了能够屏蔽神经元的输出外,还有恐怕会自行管理神经元输出值的 scale。所以用 dropout 的时候能够毫无考虑 scale。

keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

2、在哪个地方使用dropout

输出层

末尾我们添加叁个 softmax 层,好似前边的单层 softmax regression 同样。

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2)   b_fc2)

平日会在全连接层使用dropout,但也得以在最大池化后接受dropout,进而发出某种图像噪声加强。

练习和评估模型

以此模型的效应如何呢?

为了扩充练习和评估,大家运用与事情未发生前大致的单层 SoftMax神经网络模型大概等同的意气风发套代码,只是我们会用特别复杂的 ADAM 优化器来做梯度最速下跌,在 feed_dict 中投入额外的参数 keep_prob 来调控dropout 比例。然后每 100 次迭代输出一遍日志。

cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
sess.run(tf.initialize_all_variables())
for i in range(20000):
  batch = mnist.train.next_batch(50)
  if i0 == 0:
    train_accuracy = accuracy.eval(feed_dict={
        x:batch[0], y_: batch[1], keep_prob: 1.0})
    print "step %d, training accuracy %g"%(i, train_accuracy)
  train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

print "test accuracy %g" 
		

本文由新浦京81707con发布于功能介绍,转载请注明出处:DNN模块的前向传播与反向传播,CNN卷积神经网络

关键词: 新浦京81707con 前向 模块 DNN Python机器学习

上一篇:深度学习中的的超参数调节,深度学习最常用的

下一篇:没有了

Copyright © 2018 http://www.regboy.com All Rights Reserved |

新浦京81707con(www.regboy.com)提供安全免费的在线小游戏,www.81707com拥有较好的网速之外,新浦京81707con致力于对大量的用户需求进行分析,点击登录。