主要内容

定义定制的深度学习过渡层

提示

这一主题解释了如何自定义深度学习层的问题。的内置层深度学习工具箱™,明白了深度学习层的列表

学习如何定义自定义输出层,明白了自定义输出层深度学习

如果深度学习工具箱提供的层不需要为你的任务,你可以定义自己的自定义层使用这个主题作为指南。定义自定义层后,可以自动检查层是有效的和GPU兼容,并输出正确定义渐变。

过渡层结构

当你训练一个网络,软件迭代执行前后通过网络。

在通过网络,每一层都需要前一层的输出,适用于一个函数,然后输出(向前传播)结果到下一层。有状态层,例如LSTM层,也更新层的状态。

层可以有多个输入或输出。例如,一个层X1、…XN之前从多个层次和转发传播输出Z1、…Z随后的层。

最后的传球前进网络输出层计算损失l之间的预测Y和目标T

在向后通过网络,每一层需要的衍生品损失对输出层,计算损失的衍生品l对于输入,然后向后传播的结果。如果层可学的参数,然后一层一层的衍生品也计算重量(可学的参数)。层使用衍生品的权重更新可学的参数。

下图描述了通过深层神经网络的数据流,凸显了通过使用单个输入层数据流X,一个单一的输出Z,可学的参数W

网络图显示通过在训练神经网络的数据流。

过渡层模板

定义一个自定义的中间一层,使用这个类定义模板。这个模板提供了一个中间的结构层类定义。概述:

  • 可选属性块层属性,可学的参数和状态参数。有关更多信息,请参见中间层特性

  • 层构造函数。

  • 预测功能和可选的向前函数。有关更多信息,请参见转发功能

  • 可选resetState功能层与国家性质。有关更多信息,请参见重置状态函数

  • 可选落后的函数。有关更多信息,请参见落后的函数

classdefmyLayer < nnet.layer.Layer%……% & nnet.layer。为mattable ... % (Optional)% & nnet.layer。Acceleratable%(可选)属性%(可选)层属性。%声明层属性。结束属性(可学的)%(可选)层可学的参数。%这里声明可学的参数。结束属性(状态)%(可选)层状态参数。%申报状态参数。结束属性(可学的,状态)%(可选)嵌套dlnetwork对象都可学的%参数和状态参数。%声明嵌套网络可学的和状态参数。结束方法函数层= myLayer ()%(可选)创建一个myLayer。%这个函数必须具有相同的名称作为类。%定义层构造器函数。结束函数层=初始化(层、布局)%(可选)初始化层可学的和状态参数。%%的输入:%初始化层-层%布局-数据布局,指定为一个networkDataLayout%的对象%%输出:%层-层初始化%%,与多个输入层,取代布局% layout1,…,layoutN, where N is the number of inputs.%定义层的初始化函数。结束函数[Z,状态]=预测(层,X)%前进通过层预测时间和输入数据%输出结果和状态更新。%%的输入:%层-层向前传播% X -输入数据%输出:% Z -输出层的功能%——(可选)更新层状态%%,与多个输入层,取代X X1,…, XN,% N是输入的数量。%,与多个输出层,取代Z% Z1,…,Z米,在那里米是输出的数量。%——层具有多个状态参数,更换状态% state1,…,状态K,在那里K我s the number of state%的参数。%定义层预测函数。结束函数向前(Z、状态、内存)=(层,X)%(可选)正向输入数据通过层培训%的时间和输出结果,更新后的状态,和记忆%值。%%的输入:%层-层向前传播% X -层输入数据%输出:% Z -输出层的功能%——(可选)更新层状态%的记忆——自定义(可选的)内存值落后%的功能%%,与多个输入层,取代X X1,…, XN,% N是输入的数量。%,与多个输出层,取代Z% Z1,…,Z米,在那里米是输出的数量。%——层具有多个状态参数,更换状态% state1,…,状态K,在那里K我s the number of state%的参数。%定义层函数。结束函数层= resetState(层)%(可选)设置层的状态。%定义重置状态函数。结束函数[dLdX, dLdW dLdSin] =向后(层,X, Z, dLdZ dLdSout,内存)%(可选)向后传播损失的导数%通过层功能。%%的输入:%层-层反向传播% X -层输入数据% Z -层输出数据% dLdZ -导数的损失对层%输出% dLdSout——(可选)损失的导数%状态输出%的记忆——记忆值函数%输出:% dLdX -导数的损失对输入层% dLdW——(可选)的导数对损失%可学的参数% dLdSin——(可选)的导数对损失%状态输入%%——层与状态参数,必须向后语法%包括dLdSout和dLdSin,或没有。%,与多个输入层,X和dLdX替换% X1,…,XN和dLdX1,…, dLdXN,respectively, where N is%的数量输入。%,与多个输出层,Z和dlZ替换% Z1,…,Z米和dLdZ,。。。,分别dLdZM, M是%的输出。%——层具有多个可学的参数,替换%与dLdW1 dLdW,…,dldWP,在那里P我s the number of%可学的参数。%——层具有多个状态参数,取代dLdSin%和dLdSout dLdSin1,……、dLdSinK和% dLdSout1,…,dldSoutK, respectively, where K is the number%的状态参数。%定义层向后函数。结束结束结束

格式化的输入和输出

使用dlarray更易于处理高维数据的对象允许您标签的尺寸。例如,您可以标签尺寸对应于空间,时间,频道,使用批处理维度“S”,“T”,“C”,“B”标签,分别。未指明的和其他维度,使用“U”标签。为dlarray对象的函数操作特定的尺寸,你可以指定尺寸标签的格式dlarray直接对象,或通过使用DataFormat选择。

使用格式化的dlarray对象自定义层也允许您定义的输入和输出层有不同的格式,如交换层,添加或删除维度。例如,您可以定义一个层,将mini-batch作为输入的图像格式“SSCB”(空间、空间、通道、批处理)和输出序列的mini-batch格式“认知行为治疗”(通道、批量、时间)。使用格式化的dlarray对象还允许您定义层,可以操作数据与不同的输入格式,例如,层支持输入格式万博1manbetx“SSCB”(空间、空间、通道、批处理)“认知行为治疗”(通道、批量、时间)。

如果你不指定一个落后的函数,那么层函数,默认情况下,接收无格式dlarray对象作为输入。指定层接收到格式化dlarray对象作为输入和输出格式dlarray对象,也继承了nnet.layer.Formattable类在定义自定义层。

为一个例子,演示如何定义一个自定义格式化的输入层,明白了定义定制的深度学习与格式化输入层

自定义层加速度

如果你不指定一个向后函数定义一个自定义层时,然后使用自动软件自动确定渐变分化。

当你训练一个网络与自定义层没有后退功能,软件每个输入痕迹dlarray对象的自定义层转发功能来确定计算图用于自动分化。这种跟踪过程可能需要一些时间,可以最后再计算相同的痕迹。通过优化、缓存和重用的痕迹,可以加速梯度计算当培训网络。软件也可以重用这些痕迹加快网络训练后的预测。

跟踪取决于大小,格式,和底层数据层的输入类型。即层触发一个新的跟踪输入大小,格式,或基础数据类型不包含在缓存中。输入不同的价值只有通过先前缓存的任何痕迹不引发一个新的跟踪。

表明支持自定义层加速度,也继承了万博1manbetxnnet.layer.Acceleratable类在定义自定义层。当一个继承自定义层nnet.layer.Acceleratable传递数据时,软件会自动缓存痕迹通过dlnetwork对象。

例如,表明自定义层myLayer万博1manbetx支持加速,使用这种语法

classdefmyLayer < nnet.layer.Layer& nnet.layer.Acceleratable结束

加速度的考虑

因为缓存痕迹的本质,并不是所有的功能都支持加速度。万博1manbetx

缓存过程可以缓存值或代码结构,你可能期望改变,或者取决于外部因素。你必须照顾当加速自定义层:

  • 生成随机数。

  • 使用如果语句和循环和条件,取决于的值dlarray对象。

因为缓存过程需要额外的计算、加速会导致在某些情况下再运行代码。这种情况可能发生在软件花时间创建新的缓存经常得不到重用。例如,当您传递多个mini-batches不同的序列长度的函数,每个独特的软件触发一个新的跟踪序列长度。

当自定义层加速度导致经济放缓,您可以禁用加速通过移除Acceleratablemixin或禁用的加速度dlnetwork对象的功能预测向前通过设置加速度选项“没有”

关于启用加速支持自定义的更多信息层,明白了万博1manbetx自定义层加速度函数

中间层特性

声明的层属性属性部分类的定义。

默认情况下,自定义中间层具有这些属性。不声明这些属性属性部分。

财产 描述
的名字 图层名称,指定为一个特征向量或字符串标量。为数组输入,trainNetwork,assembleNetwork,layerGraph,dlnetwork函数自动分配名称层的名称
描述

一行的描述层,指定为字符串标量或特征向量。这个描述层显示在一个时出现数组中。

如果你不指定层的描述,然后软件显示层的类名。

类型

层的类型,指定为一个特征向量或字符串标量。的价值类型当层显示在一个出现数组中。

如果你不指定层类型,那么软件显示层的类名。

NumInputs 输入层的数量,指定为一个正整数。如果不指定这个值,则软件自动设置NumInputs人名的数目InputNames。默认值是1。
InputNames 输入层的名称,指定为一个单元阵列的特征向量。如果不指定这个值NumInputs大于1,那么软件自动设置InputNames{“三机”,…,“客栈”},在那里N等于NumInputs。默认值是{'在'}
NumOutputs 输出层的数量,指定为一个正整数。如果不指定这个值,则软件自动设置NumOutputs人名的数目OutputNames。默认值是1。
OutputNames 输出层的名称,指定为一个单元阵列的特征向量。如果不指定这个值NumOutputs大于1,那么软件自动设置OutputNames{着干活,…,“outM”},在那里等于NumOutputs。默认值是{“出”}

如果层没有其他属性,那么您可以省略的属性部分。

提示

如果你创建一个与多个输入层,然后你必须设置NumInputsInputNames属性层构造函数。如果你创建一个和多个输出层,然后你必须设置NumOutputsOutputNames属性层构造函数。例如,看到的定义定制的深度学习与多个输入层

可学的参数

宣布层可学的参数属性(可学的)部分类的定义。

您可以指定数值数组或dlnetwork对象作为可学的参数。如果dlnetwork对象可学的和状态参数(例如,一个dlnetwork对象,该对象包含一个LSTM层),那么您必须指定它属性(可学的,国家)部分。如果层没有可学的参数,然后你就可以省略了属性部分的可学的属性。

可选地,您可以指定的学习速率因子和L2因子可学的参数。默认情况下,每个可学的参数都有其学习速率因子和L2因子设置为1。内置和自定义层,您可以设置和获取的学习速率因子和L2正则化因子使用以下功能。

函数 描述
setLearnRateFactor 设置一种可习得的学习速率因子参数。
setL2Factor 可学的L2正则化因子的参数设置。
getLearnRateFactor 得到一种可习得的学习速率因子参数。
getL2Factor 得到了L2正则化因子可学的参数。

指定的学习速率因子和L2因子可学的参数,使用语法层= setLearnRateFactor(层、parameterName值)层= setL2Factor(层、parameterName值),分别。

得到的值的学习速率因子和L2因子可学的参数,使用语法parameterName getLearnRateFactor(层)parameterName getL2Factor(层),分别。

例如,这个语法的学习速率因子可学的参数集“阿尔法”0.1

一层一层= setLearnRateFactor (,“阿尔法”,0.1);

状态参数

复发性等状态层,层,宣布层状态参数属性(状态)部分类的定义。如果参数是一个可学的dlnetwork对象都可学的和状态参数(例如,一个dlnetwork对象,该对象包含一个LSTM层),那么您必须指定相应的财产属性(可学的,国家)部分。如果层没有状态参数,然后你就可以省略了属性部分的状态属性。

如果层状态参数,提出函数必须返回更新层的状态。有关更多信息,请参见转发功能

指定一个自定义复位态函数,包括函数的语法层= resetState(层)在类的定义。有关更多信息,请参见重置状态函数

并行训练包含自定义的网络层与状态参数使用trainNetwork不支持功能。万博1manbetx当你训练一个网络与自定义层状态参数ExecutionEnvironment培训选项必须是“汽车”,“图形”,或“cpu”

可学的和状态参数初始化

您可以指定初始化层可学的参数和状态的层构造函数或一个自定义的初始化功能:

  • 如果可学的或状态参数初始化不需要从层大小信息输入,例如,可学的权重加权加法层是一个向量的大小匹配层的数量输入,然后你可以在层构造函数初始化权重。例如,看到的定义定制的深度学习与多个输入层

  • 如果可学的或状态参数初始化需要从层大小信息的输入,例如,可学的权重PReLU层是一个向量的大小匹配通道的输入数据的数量,然后你可以在自定义初始化权值初始化函数,利用信息输入数据布局。例如,看到的定义定制的深度学习层与可学的参数

转发功能

一些层在训练和在预测上的表现也不同。例如,一个辍学层执行辍学只在训练和预测期间没有任何影响。一层使用两个函数来执行一个传球前进:预测向前。如果前进传球在预测时间,然后层使用预测函数。如果前进传球训练时间,然后层使用向前函数。如果你不需要两个不同的功能预测时间和培训时间,然后你就可以省略了向前函数。当你这样做时,层使用预测在训练时间。

如果层的状态参数,然后向前函数必须返回更新层状态参数数值数组。

如果您定义一个自定义向前功能和自定义落后的函数必须返回一个函数,那么前进内存输出。

预测函数的语法取决于类型的层。

  • Z =预测(层,X)将输入数据转发X通过层和输出结果Z,在那里只有一个输入和一个输出。

  • [Z,状态]=预测(层,X)也输出更新的状态参数状态,在那里只有一个状态参数。

你可以调整层的语法与多个输入,多个输出,或多个状态参数:

  • 与多个输入层,取代XX1,…, XN,在那里N输入的数量。的NumInputs属性必须匹配N

  • 与多个输出层,取代ZZ1,…, ZM评选,在那里是输出的数量。的NumOutputs属性必须匹配

  • 层具有多个状态参数,替换状态state1,…, stateK,在那里K是状态参数的数量。

提示

如果输入层可以不同的数量,然后使用变长度输入宗量而不是X1,…, XN。在这种情况下,变长度输入宗量是一个单元阵列的输入,在哪里变长度输入宗量{我}对应于

如果输出的数量可以改变,那么使用varargout而不是Z1、…、锌。在这种情况下,varargout是一个单元阵列的输出,在哪里varargout {j}对应于Zj

提示

如果有一个自定义层dlnetwork为一种可习得的参数对象,然后在预测自定义功能层,使用预测函数dlnetwork。当你这样做,dlnetwork对象预测函数使用适当的预测层操作。如果dlnetwork也有状态参数,然后返回网络状态。

向前函数的语法取决于类型的层:

  • Z =前进(层,X)将输入数据转发X通过层和输出结果Z,在那里只有一个输入和一个输出。

  • [Z,状态]=前进(层,X)也输出更新的状态参数状态,在那里只有一个状态参数。

  • (__、内存)=(层,X)转发也为一个自定义的内存返回一个值落后的函数使用任何以前的语法。如果层有一个定制的向前功能和自定义落后的函数,那么这个函数必须返回一个内存值。

你可以调整层的语法与多个输入,多个输出,或多个状态参数:

  • 与多个输入层,取代XX1,…, XN,在那里N输入的数量。的NumInputs属性必须匹配N

  • 与多个输出层,取代ZZ1,…, ZM评选,在那里是输出的数量。的NumOutputs属性必须匹配

  • 层具有多个状态参数,替换状态state1,…, stateK,在那里K是状态参数的数量。

提示

如果输入层可以不同的数量,然后使用变长度输入宗量而不是X1,…, XN。在这种情况下,变长度输入宗量是一个单元阵列的输入,在哪里变长度输入宗量{我}对应于

如果输出的数量可以改变,那么使用varargout而不是Z1、…、锌。在这种情况下,varargout是一个单元阵列的输出,在哪里varargout {j}对应于Zj

提示

如果有一个自定义层dlnetwork为一种可习得的参数对象,然后在向前自定义功能层,使用向前的函数dlnetwork对象。当你这样做,dlnetwork对象向前函数使用适当的层操作培训。

的尺寸取决于类型的数据输入和输出的连接层。

层的输入 输入的大小 观察维度
特征向量 c——- - - - - -N,在那里c对应的渠道和数量N是观测的数量吗 2
二维图像 h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c对应的高度、宽度和通道的图像,分别N是观测的数量吗 4
三维图像 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N,在那里h,w,d,c对应高度、宽度、深度和通道数量的3 d图像,分别N是观测的数量吗 5
向量序列 c——- - - - - -N——- - - - - -年代,在那里c的特征序列的数量,N是观测的数量,和年代是序列长度 2
二维图像序列 h——- - - - - -w——- - - - - -c——- - - - - -N——- - - - - -年代,在那里h,w,c对应的高度、宽度和通道的图像,分别N是观测的数量,和年代是序列长度 4
三维图像序列 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N——- - - - - -年代,在那里h,w,d,c对应高度、宽度、深度和通道数量的3 d图像,分别N是观测的数量,和年代是序列长度 5

对于输出序列的层,层可以输出序列的长度或没有时间维度的输出数据。请注意,当您训练网络,输出序列使用trainNetwork函数,输入和输出序列的长度必须匹配。

自定义层转发功能的输出不能复杂。如果预测向前定制功能层包括复数,所有的输出转换为实际值返回之前。使用复数预测向前您的自定义功能层会导致复杂的可学的参数。如果您使用的是自动分化(换句话说,你不写向后函数定制层)然后把所有可学的参数真实值的函数计算。这样做可以确保向后自动生成函数的输出并不复杂。

重置状态函数

DAGNetworkSeriesNetwork对象包含层与状态参数,您可以做出预测和更新层使用predictAndUpdateStateclassifyAndUpdateState功能。你可以重置网络状态使用resetState函数。

resetState函数DAGNetwork,SeriesNetwork,dlnetwork对象,默认情况下,在自定义层状态参数没有影响。定义层的行为resetState网络对象的函数,定义可选层resetState功能层,重置状态的参数定义。

resetState函数必须有语法层= resetState(层),返回层复位状态属性。

resetState函数不能设置任何层属性除了可学的和国家的属性。如果函数集其他层的属性,那么层可以意外的行为。(因为R2023a)

落后的函数

层向后函数计算的衍生品损失对输入数据,然后输出(向后传播)结果前一层。如果层可学的参数(例如,层权重),落后的还计算了衍生品可学的参数。当你使用trainNetwork层功能,自动更新可学的参数使用这些衍生品在向后传递。

定义落后的函数是可选的。如果你不指定一个落后的函数,和层转发功能的支持万博1manbetxdlarray对象,那么软件自动决定使用自动反向功能分化。支持的功能列表万博1manbetxdlarray对象,看到与dlarray支持函数的列表万博1manbetx。定义一个自定义反向功能当你想:

  • 使用一个特定的算法来计算衍生品。

  • 使用操作功能,不支持万博1manbetxdlarray对象。

自定义层与可学的dlnetwork向后对象不支持自定义功能。万博1manbetx

向后定义一个自定义函数,创建一个函数命名落后的

落后的函数的语法取决于类型的层。

  • dLdX =向后(层,X, Z, dLdZ,内存)返回衍生品dLdX损失对层的输入,在那里只有一个输入和一个输出。Z对应的函数输出和向前发展dLdZ对应的导数对损失Z。函数的输入内存对应的内存输出函数。

  • [dLdX, dLdW] =向后(层,X, Z, dLdZ,内存)还返回导数dLdW的损失就可学会的参数,在哪里只有一个可学的参数。

  • [dLdX, dLdSin] =向后(层,X, Z, dLdZ dLdSout,内存)还返回导数dLdSin失去对国家输入,在哪里一个状态参数和吗dLdSout对应的导数损失对层状态输出。

  • [dLdX, dLdW dLdSin] =向后(层,X, Z, dLdZ dLdSout,内存)还返回导数dLdW的损失可学的参数和返回的导数dLdSin的损失对层状态输入,在哪里只有一个状态参数和单一可学的参数。

你可以调整层的语法与多个输入,多个输出,多个可学的参数,或多个状态参数:

  • 与多个输入层,取代XdLdXX1,…, XNdLdX1,…, dLdXN分别在哪里N输入的数量。

  • 与多个输出层,取代ZdLdZZ1,…, ZM评选dLdZ1,…, dLdZM分别在哪里是输出的数量。

  • 层具有多个可学的参数替换dLdWdLdW1,…, dLdWP,在那里P是可学的参数的数量。

  • 层具有多个状态参数,替换dLdSindLdSoutdLdSin1,…, dLdSinKdLdSout1,…, dLdSoutK分别在哪里K是状态参数的数量。

以减少内存使用,防止未使用的变量保存之间向前和向后传递,更换相应的输入参数~

提示

如果输入的数量落后的可以改变,然后使用吗变长度输入宗量而不是后输入参数。在这种情况下,变长度输入宗量是一个单元阵列的输入,第一个在哪里N对应的元素N输入层,下一个对应的元素输出层,下一个元素对应的衍生品亏损的输出层,下一个K对应的元素K对衍生品的损失K国家输出,和最后一个元素对应内存

如果输出的数量可以改变,那么使用varargout而不是输出参数。在这种情况下,varargout是一个单元阵列的输出,第一个在哪里N对应的元素N对衍生品的损失N输入层,下一个P元素对应的衍生品亏损的P可学的参数,和未来K元素对应的衍生品亏损的K状态输入。

的值XZ在前进的功能是一样的。的尺寸dLdZ的尺寸是一样的吗Z

的尺寸和数据类型dLdX的尺寸和数据类型都是相同的吗X。的尺寸和数据类型dLdW的尺寸和数据类型都是相同的吗W

计算损失的衍生品,你可以用链式法则:

l X ( ) = j l Z j Z j X ( )

l W = j l Z j Z j W

当你使用trainNetwork层功能,自动更新使用衍生品可学的参数dLdW在向后传递。

向后的一个例子,演示如何定义一个自定义函数,看看指定自定义层反向功能

自定义层向后函数的输出不能复杂。如果你向后函数包括复数,然后向后的所有输出函数转换为实际值返回之前。

GPU的兼容性

如果层转发功能完全支持万博1manbetxdlarray对象,则GPU兼容层。否则,必须支持GPU兼容,层功能的输入并返回输出类型万博1manbetxgpuArray(并行计算工具箱)

许多MATLAB®内置函数支持万博1manbetxgpuArray(并行计算工具箱)dlarray输入参数。支持的功能列表万博1manbetxdlarray对象,看到与dlarray支持函数的列表万博1manbetx。对GPU执行的函数的列表,看看运行在GPU MATLAB函数(并行计算工具箱)使用GPU深度学习,你也必须有一个支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)在MATLAB与gpu的更多信息,见在MATLAB GPU计算(并行计算工具箱)

代码生成的兼容性

要创建一个自定义层支持代码生成:万博1manbetx

  • 层必须指定编译指示% # codegen层定义。

  • 的输入预测必须:

    • 一致的维度。每个输入必须有相同数量的维度。

    • 批处理大小一致。每个输入必须有相同的批处理大小。

  • 的输出预测必须是一致的维度和批量大小的输入层。

  • Nonscalar属性必须有类型单一、双或字符数组。

  • 标量属性必须有类型数字、逻辑或字符串。

代码生成与二维图像或特征输入支持万博1manbetx过渡层。代码生成与国家不支持层属性(属性与属性万博1manbetx状态)。

为一个例子,演示如何创建一个自定义层支持代码生成,明白了万博1manbetx定义定制的深度学习层代码生成

网络的作文

要创建一个自定义层本身定义了一层图,你可以声明一个dlnetwork作为一个可学的参数对象属性(可学的)部分层定义。这种方法被称为网络的作文。您可以使用网络作文:

  • 创建一个自定义层代表一块可学的层,例如,一个残块。

  • 创建一个网络与控制流,例如,一个网络的部分可以动态地改变取决于输入数据。

  • 创建一个网络与循环,例如,一个网络部分饲料输出回本身。

嵌套网络都可学的和状态参数,例如,网络与批量标准化或LSTM层,宣布的网络属性(可学的,国家)部分层定义。

GPU的兼容性

如果层转发功能完全支持万博1manbetxdlarray对象,则GPU兼容层。否则,必须支持GPU兼容,层功能的输入并返回输出类型万博1manbetxgpuArray(并行计算工具箱)

许多MATLAB内置函数的支持万博1manbetxgpuArray(并行计算工具箱)dlarray输入参数。支持的功能列表万博1manbetxdlarray对象,看到与dlarray支持函数的列表万博1manbetx。对GPU执行的函数的列表,看看运行在GPU MATLAB函数(并行计算工具箱)使用GPU深度学习,你也必须有一个支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)在MATLAB与gpu的更多信息,见在MATLAB GPU计算(并行计算工具箱)

检查的有效性层

如果你创建一个定制的深度学习层,那么您可以使用checkLayer函数检查层是有效的。函数检查层有效性,GPU兼容性,正确定义渐变和代码生成的兼容性。一层是有效的检查,运行以下命令:

validInputSize checkLayer(层)
层和的一个实例吗validInputSize是一个向量或细胞数组指定有效的输入层大小。与多个观察,检查使用ObservationDimension选择。运行检查代码生成兼容性,设置CheckCodegenCompatibility选项1(真正的)。对于大的输入大小,梯度检查运行的时间较长。加快检查,指定一个较小的有效输入的大小。

有关更多信息,请参见检查自定义层有效性

检查的有效性定义层使用checkLayer

检查自定义层的层有效性preluLayer

自定义图层preluLayer,附加到这个例子作为支持文件,PReLU操作适用于输入数据。万博1manbetx进入这一层,打开这个例子作为一个活的脚本。

创建一个实例的层。

层= preluLayer;

因为层有一个自定义的初始化函数,初始化层使用networkDataFormat对象,该对象指定预期的一个输入的大小和格式的观察典型的输入层。

指定一个有效的输入的大小(24日24日20)维度对应的高度,宽度,和前一层的输出渠道的数量。

validInputSize =(24日24日20);布局= networkDataLayout (validInputSize,“SSC”);层=初始化(层、布局);

检查层使用有效性checkLayer。指定有效输入大小尺寸一样大小用来初始化层。当你通过网络传递数据,预计4 - d数组输入层,其中第一三维对应高度,宽度,和前面的通道数层输出,和第四维对应于观测。

指定一个观察的典型输入的大小和设置ObservationDimension选项4。

checkLayer(层、validInputSize ObservationDimension = 4)
跳过GPU测试。不兼容的GPU设备发现。跳过代码生成的兼容性测试。检查代码生成层的有效性,指定“CheckCodegenCompatibility”和“ObservationDimension”选项。nnet.checklayer运行。TestLayerWithoutBackward .......... ........ Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 18 Passed, 0 Failed, 0 Incomplete, 10 Skipped. Time elapsed: 0.22352 seconds.

层的功能没有发现任何问题。

另请参阅

||||||||||

相关的话题