Main Content

initialize

dlnetwork の学習可能なパラメーターと状態パラメーターの初期化

R2021a 以降

    説明

    ヒント

    ほとんどの 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"    {0x0 double}
        "conv"         "Bias"       {0x0 double}
        "batchnorm"    "Offset"     {0x0 double}
        "batchnorm"    "Scale"      {0x0 double}
        "fc"           "Weights"    {0x0 double}
        "fc"           "Bias"       {0x0 double}
    
    

    関数 initialize を使用して、ネットワークの学習可能なパラメーターを初期化します。

    net = initialize(net);

    ネットワークの学習可能なパラメーターを表示します。ネットワークが初期化されたため、値は空でなく、入力層のサイズを使用して推定されたサイズになっています。

    net.Learnables

    多入力のイメージ分類ネットワークを定義します。

    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)

    ネットワークの学習可能なパラメーターを表示します。ネットワークが初期化されていないため、値は空になっています。

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

    ネットワーク入力の名前を表示します。

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

    ネットワークへの入力を表すランダムな dlarray オブジェクトを作成します。ネットワークの主分岐には、3 つのチャネルをもつ 64 行 64 列のサンプル入力を使用します。2 番目の分岐には、18 個のチャネルをもつ 64 行 64 列の入力を使用します。

    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

    2 つの未接続の入力をもつ未初期化の 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 = 1x2 cell
        {'conv'}    {'cat/in2'}
    
    

    入力の入力データを表すネットワーク データ レイアウト オブジェクトを作成します。最初の入力には、28 行 28 列のグレースケール イメージのバッチを指定します。2 番目の入力には、シングルチャネルの特徴データのバッチを指定します。

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

    ネットワーク データ レイアウト オブジェクトを使用してネットワークを初期化します。

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

    入力引数

    すべて折りたたむ

    未初期化のネットワーク。dlnetwork オブジェクトとして指定します。

    学習可能なパラメーターと状態パラメーターのサイズと形式を決定するのに使用されるサンプル データまたはデータ レイアウト。形式を整えた dlarray オブジェクトまたは形式を整えた networkDataLayout オブジェクトとして指定します。ソフトウェアは、X1,...XN をネットワーク全体に伝播させて、dlnetwork オブジェクトの学習可能なパラメーターと状態パラメーターの適切なサイズと形式を決定し、未設定の学習可能なパラメーターと状態パラメーターがあれば、それを初期化します。

    入力ネットワークの InputNames プロパティで指定された順序と同じ順序でサンプル入力を与えます。

    メモ

    自動的な初期化では、入力データのサイズと形式の情報のみが使用されます。入力データの値に基づいて初期化を行う場合、学習可能なパラメーターを手動で初期化しなければなりません。

    出力引数

    すべて折りたたむ

    初期化済みのネットワーク。初期化済みの dlnetwork オブジェクトとして返されます。

    関数 initialize は量子化情報を保持しません。入力ネットワークが量子化されたネットワークであった場合でも、出力ネットワークに量子化情報は含まれません。

    バージョン履歴

    R2021a で導入

    すべて展開する