主要内容

本页采用了机器翻译。点击此处可查看英文原文。

createMLPNetwork

创建并初始化多层感知器 (MLP) 网络,用于神经状态空间系统

自 R2022b 起

    说明

    dlnet = createMLPNetwork(nss,type) 创建一个类型为 type 的多层感知器 (MLP) 网络 dlnet,用于近似神经状态空间对象 nss 的状态、(输出中的非平凡部分)、编码器或解码器函数。例如,要为状态函数指定网络,请使用

    nss.StateNetwork = createMLPNetwork(nss,"state",...)
    要为输出函数的非平凡部分指定网络,请使用
    nss.OutputNetwork(2) = createMLPNetwork(nss,"output",...)
    要指定编码器网络配置,请使用
    nss.Encoder = createMLPNetwork(nss,"encoder",...)
    要指定解码器网络配置,请使用
    nss.Decoder = createMLPNetwork(nss,"decoder",...)

    示例

    dlnet = createMLPNetwork(___,Name=Value) 在前一种语法中任何参量之后指定名称-值参量。您可以使用名称-值参量来设置层数、每层神经元数量或其激活函数类型。

    例如,dlnet = createMLPNetwork(nss,"output",LayerSizes=[4 3],Activations="sigmoid") 创建了一个输出网络,其中包含两个隐藏层,分别具有四个和三个采用 sigmoid 激活函数的神经元。

    示例

    全部折叠

    使用 idNeuralStateSpace 创建一个具有三个状态和一个输入的连续时间神经状态空间对象。默认情况下,状态网络包含两个隐藏层,每个隐藏层拥有 64 个神经元,并采用双曲正切激活函数。

    nss = idNeuralStateSpace(3,NumInputs=1)
    nss =
    
    Continuous-time Neural ODE in 3 variables
         dx/dt = f(x(t),u(t))
          y(t) = x(t) + e(t)
     
    f(.) network:
      Deep network with 2 fully connected, hidden layers
      Activation function: tanh
     
    Variables: x1, x2, x3
     
    Status:                                                         
    Created by direct construction or transformation. Not estimated.
    
    Model Properties
    

    使用 createMLPNetwork 和点表示法,重新配置状态网络。指定三个隐藏层,分别包含 484 神经元,并使用 sigmoid 作为激活函数。

    nss.StateNetwork = createMLPNetwork(nss,"state", ...
        LayerSizes=[4 8 4],Activations="sigmoid");

    现在您可以使用时域数据进行估计和验证。

    输入参数

    全部折叠

    神经状态空间对象,指定为 idNeuralStateSpace 对象。

    示例: idNeuralStateSpace(2,NumInputs=1)

    网络类型,指定为以下之一:

    • "state" - 创建一个网络来近似 nss 的状态函数。对于连续时域状态空间系统,状态函数返回系统状态对时间的导数;而对于离散时域状态空间系统,它返回下一个状态。状态函数的输入包括时间(当 IsTimeInvariantfalse 时)、当前状态以及当前输入(当 NumInputs 为正值时)。

    • "output" - 创建一个网络,用于近似 nss 输出函数的非平凡部分。该网络返回非平凡系统输出 y2(t) = H(t,x,u),其作为时间(若 IsTimeInvariantfalse)、当前状态及当前输入(若 NumInputs 为正值)的函数。有关详细信息,请参阅 idNeuralStateSpace

    • "encoder" - 创建一个网络来近似编码器函数。编码器将状态映射到潜在状态(通常为低维度),该潜在状态作为输入传递给状态函数网络。有关详细信息,请参阅 idNeuralStateSpace

    • "decoder" - 创建一个网络来近似解码器函数。状态函数网络的输出即为解码器的输入。解码器将潜在状态映射回原始状态。有关详细信息,请参阅 idNeuralStateSpace

    名称-值参数

    全部折叠

    Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

    示例: LayerSizes=[16 32 16]

    使用名称-值参量来指定网络属性,例如隐藏层的数量、每个隐藏层的大小、激活函数以及权重和偏置的初始化方法。

    层尺寸,指定为正整数向量。每个数值指定了每个隐藏层的神经元数量(每个层都是全连接的)。例如,[10 20 8] 表示一个具有三个隐藏层的网络,其中第一个隐藏层(位于网络输入之后)包含 10 个神经元,第二个隐藏层包含 20 个神经元,最后一个隐藏层(位于网络输出之前)包含 8 个神经元。请注意,输出层也是全连接的,且其大小不可更改。

    所有隐藏层的激活函数类型,指定为以下之一:"tanh""sigmoid""relu""leakyRelu""clippedRelu""elu""gelu""swish""softplus""scaling""softmax"。所有这些都可在 Deep Learning Toolbox™ 中找到。

    您可以为 "leakyRelu""clippedRelu""elu""scaling" 指定超参数值。例如:

    • "leakyRelu(0.2)" 指定了一个具有泄漏特性的 ReLU 激活层,其缩放值为 0.2

    • "clippedRelu(5)" 指定了一个截断的 ReLU 激活层,其上限值是 5

    • "elu(2)" 指定一个 ELU 激活层,其 Alpha 属性等于 2

    • "scaling(0.2,4)" 指定了一个缩放激活层,其缩放因子为 0.2,偏置为 4

    此外,您现在可以通过将激活函数指定为 "none" 来选择不使用激活函数。

    有关这些激活的更多信息,请参阅深度学习层列表 (Deep Learning Toolbox)中的激活图层和实用工具图层章节。

    所有隐藏层的权重初始化方法,指定为以下选项之一:

    • "glorot" - 使用 Glorot 方法。

    • "he" - 使用 He 方法。

    • "orthogonal" - 使用正交法。

    • "narrow-normal" - 使用窄正态方法。

    • "zeros" - 将所有权重初始化为零。

    • "ones" - 将所有权重初始化为 1。

    所有隐藏层的偏置初始化方法,指定为以下选项之一:

    • "narrow-normal" - 使用窄正态方法。

    • "zeros" - 将所有偏置初始化为零。

    • "ones" - 将所有偏置初始化为 1。

    输出参量

    全部折叠

    nss 的状态或输出函数网络,指定为 dlnetwork (Deep Learning Toolbox) 对象。

    对于连续时域状态空间系统,状态函数返回系统状态对时间的导数;而对于离散时域状态空间系统,它返回下一个状态。状态函数的输入包括时间(当 IsTimeInvariantfalse 时)、当前状态以及当前输入(当 NumInputs 为正值时)。

    输出函数返回系统输出作为时间(若 IsTimeInvariantfalse)、当前状态和当前输入(若 NumInputs 为正值)的函数。

    注意

    您可以使用诸如 summary(dlnet)plot(dlnet)dlnet.Layersdlnet.Learnables 等命令来检查网络详细信息。

    版本历史记录

    在 R2022b 中推出