主要内容

initialize

初始化神经网络的可学习参数和状态参数

    说明

    提示

    大多数 dlnetwork 对象默认已初始化。仅当 dlnetwork 未初始化时,您才需要手动对其进行初始化。您可以使用 dlnetwork 对象的 Initialized 属性来检查网络是否已初始化。

    netUpdated = initialize(net) 根据网络输入层定义的输入大小,初始化 net 的所有未设置的可学习参数和状态值。任何已包含值的可学习参数或状态参数将保持不变。

    如果网络的可学习参数和状态参数为未设置的空值,则该网络处于未初始化状态。您必须先初始化未初始化的 dlnetwork,然后才能使用它。默认情况下,dlnetwork 对象在构造时已配置初始参数,无需初始化。

    示例

    netUpdated = initialize(net,X1,...,XN) 根据示例网络输入或网络数据布局对象 X1,...,XN 初始化 net 的所有未设置的可学习参数和状态值。当网络存在未连接到输入层的输入时,请使用此语法。

    示例

    示例

    全部折叠

    将一个简单图像分类网络定义为层数组。

    layers = [
        imageInputLayer([28 28 1],Normalization="none")
        convolution2dLayer(5,20)
        batchNormalizationLayer
        reluLayer
        fullyConnectedLayer(10)
        softmaxLayer];

    将层图转换为 dlnetwork 对象。通过将 Initialize 选项设置为 false 来创建一个未初始化的 dlnetwork 对象。

    net = dlnetwork(layers,Initialize=false);

    查看网络的可学习参数。由于网络未初始化,这些值为空。

    net.Learnables
    ans=6×3 table
           Layer       Parameter       Value    
        ___________    _________    ____________
    
        "conv"         "Weights"    {0×0 double}
        "conv"         "Bias"       {0×0 double}
        "batchnorm"    "Offset"     {0×0 double}
        "batchnorm"    "Scale"      {0×0 double}
        "fc"           "Weights"    {0×0 double}
        "fc"           "Bias"       {0×0 double}
    
    

    使用 initialize 函数初始化网络的可学习参数。

    net = initialize(net);

    查看网络的可学习参数。由于网络现已初始化,因此这些值为非空值,大小通过输入层的大小推断得出。

    net.Learnables
    ans=6×3 table
           Layer       Parameter           Value       
        ___________    _________    ___________________
    
        "conv"         "Weights"    { 5×5×1×20 dlarray}
        "conv"         "Bias"       { 1×1×20   dlarray}
        "batchnorm"    "Offset"     { 1×1×20   dlarray}
        "batchnorm"    "Scale"      { 1×1×20   dlarray}
        "fc"           "Weights"    {10×11520  dlarray}
        "fc"           "Bias"       {10×1      dlarray}
    
    

    定义一个多输入图像分类网络。

    numFilters = 24;
    
    net = dlnetwork;
    
    layersBranch1 = [
        convolution2dLayer(3,6*numFilters,Padding="same",Stride=2)
        groupNormalizationLayer("all-channels")
        reluLayer
        convolution2dLayer(3,numFilters,Padding="same")
        groupNormalizationLayer("channel-wise")
        additionLayer(2,Name="add")
        reluLayer
        fullyConnectedLayer(10)
        softmaxLayer];
    
    layersBranch2 = [
        convolution2dLayer(1,numFilters,Name="conv_branch")
        groupNormalizationLayer("all-channels",Name="groupnorm_branch")];
    
    net = addLayers(net, layersBranch1);
    net = addLayers(net,layersBranch2);
    net = connectLayers(net,"groupnorm_branch","add/in2"); 

    在图中可视化层。

    figure
    plot(net)

    Figure contains an axes object. The axes object contains an object of type graphplot.

    查看网络的可学习参数。由于网络未初始化,这些值为空。

    net.Learnables
    ans=14×3 table
              Layer           Parameter       Value    
        __________________    _________    ____________
    
        "conv_1"              "Weights"    {0×0 double}
        "conv_1"              "Bias"       {0×0 double}
        "groupnorm_1"         "Offset"     {0×0 double}
        "groupnorm_1"         "Scale"      {0×0 double}
        "conv_2"              "Weights"    {0×0 double}
        "conv_2"              "Bias"       {0×0 double}
        "groupnorm_2"         "Offset"     {0×0 double}
        "groupnorm_2"         "Scale"      {0×0 double}
        "fc"                  "Weights"    {0×0 double}
        "fc"                  "Bias"       {0×0 double}
        "conv_branch"         "Weights"    {0×0 double}
        "conv_branch"         "Bias"       {0×0 double}
        "groupnorm_branch"    "Offset"     {0×0 double}
        "groupnorm_branch"    "Scale"      {0×0 double}
    
    

    查看网络输入的名称。

    net.InputNames
    ans = 1×2 cell
        {'conv_1'}    {'conv_branch'}
    
    

    创建表示网络输入的随机 dlarray 对象。为网络的主分支使用大小为 64×64、具有 3 个通道的示例输入。为第二个分支使用大小为 64×64、具有 18 个通道的输入。

    inputSize = [64 64 3];
    inputSizeBranch = [32 32 18];
    
    X1 = dlarray(rand(inputSize),"SSCB");
    X2 = dlarray(rand(inputSizeBranch),"SSCB");

    使用 initialize 函数初始化网络的可学习参数,并指定示例输入。按照与网络的 InputNames 属性对应的顺序指定输入。

    net = initialize(net,X1,X2);

    查看网络的可学习参数。由于网络现已初始化,因此这些值为非空值,大小通过输入数据的大小推断得出。

    net.Learnables
    ans=14×3 table
              Layer           Parameter            Value        
        __________________    _________    _____________________
    
        "conv_1"              "Weights"    { 3×3×3×144  dlarray}
        "conv_1"              "Bias"       { 1×1×144    dlarray}
        "groupnorm_1"         "Offset"     { 1×1×144    dlarray}
        "groupnorm_1"         "Scale"      { 1×1×144    dlarray}
        "conv_2"              "Weights"    { 3×3×144×24 dlarray}
        "conv_2"              "Bias"       { 1×1×24     dlarray}
        "groupnorm_2"         "Offset"     { 1×1×24     dlarray}
        "groupnorm_2"         "Scale"      { 1×1×24     dlarray}
        "conv_branch"         "Weights"    { 1×1×18×24  dlarray}
        "conv_branch"         "Bias"       { 1×1×24     dlarray}
        "groupnorm_branch"    "Offset"     { 1×1×24     dlarray}
        "groupnorm_branch"    "Scale"      { 1×1×24     dlarray}
        "fc"                  "Weights"    {10×24576    dlarray}
        "fc"                  "Bias"       {10×1        dlarray}
    
    

    创建一个具有两个未连接输入的未初始化 dlnetwork 对象。

    layers = [
        convolution2dLayer(5,16,Name="conv")
        batchNormalizationLayer
        reluLayer
        fullyConnectedLayer(50)
        flattenLayer
        concatenationLayer(1,2,Name="cat")
        fullyConnectedLayer(10)
        softmaxLayer];
    
    net = dlnetwork(layers,Initialize=false);

    查看网络的输入名称。

    net.InputNames
    ans = 1×2 cell
        {'conv'}    {'cat/in2'}
    
    

    创建表示各输入对应的输入数据的网络数据布局对象。对于第一个输入,指定一批 28×28 的灰度图像。对于第二个输入,指定一批单通道特征数据。

    layout1 = networkDataLayout([28 28 1 NaN],"SSCB");
    layout2 = networkDataLayout([1 NaN],"CB");

    使用网络数据布局对象初始化网络。

    net = initialize(net,layout1,layout2)
    net = 
      dlnetwork with properties:
    
             Layers: [8×1 nnet.cnn.layer.Layer]
        Connections: [7×2 table]
         Learnables: [8×3 table]
              State: [2×3 table]
         InputNames: {'conv'  'cat/in2'}
        OutputNames: {'softmax'}
        Initialized: 1
    
      View summary with summary.
    
    

    输入参数

    全部折叠

    未初始化的网络,指定为 dlnetwork 对象。

    用于确定可学习参数和状态参数的大小和格式的示例网络输入或数据布局,每个输入或布局都指定为下列值之一:

    软件通过网络传播 X1,...XN,以确定 dlnetwork 对象的可学习参数和状态参数的适当大小和格式,并初始化任何未设置的可学习参数或状态参数。

    要创建接收未格式化数据的神经网络,请使用 inputLayer 对象并且不指定格式。 (自 R2025a 起)

    在 R2025a 之前的版本中: X1,...XN 必须是格式化的 dlarraynetworkDataLayout 对象。

    按照输入网络的 InputNames 属性指定的顺序提供示例输入。

    注意

    自动初始化仅使用输入数据的大小和格式信息。对于依赖于输入数据值的初始化,必须手动初始化可学习参数。

    输出参量

    全部折叠

    已初始化的网络,以已初始化的 dlnetwork 对象形式返回。

    initialize 函数不会保留量化信息。如果输入网络是量化网络,则输出网络不包含量化信息。

    版本历史记录

    在 R2021a 中推出

    全部展开