メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

dljacobian

ヤコビ行列深層学習演算

R2024b 以降

    説明

    ヤコビアン深層学習演算は、指定された入力データと演算次元に関して、ニューラル ネットワークとモデル関数の出力のヤコビ行列を返します。

    jac = dljacobian(u,x,dim) は、指定された演算次元のデータ x に関して、ニューラル ネットワークまたはモデル関数の出力 u のヤコビ行列を返します。

    jac = dljacobian(u,x,dim,EnableHigherDerivatives=tf) は、バックワード パスをトレースして高次微分を有効にするかどうかも指定します。

    すべて折りたたむ

    ニューラル ネットワークを作成します。

    inputSize = [16 16 3];
    numOutputChannels = 5;
    
    layers = [
        imageInputLayer(inputSize)
        convolution2dLayer(3,64)
        reluLayer
        fullyConnectedLayer(numOutputChannels)
        softmaxLayer];
    
    net = dlnetwork(layers);

    学習データを読み込みます。この例では、ランダム データをいくつか生成します。

    numObservations = 128;
    X = rand([inputSize numObservations]);
    X = dlarray(X,"SSCB");
    
    T = rand([numOutputChannels numObservations]);
    T = dlarray(T,"CB");

    ネットワークとデータを入力として受け取り、学習可能なパラメーターに対する損失とその損失の勾配、および入力データに関する予測のヤコビアンを返すモデル損失関数を定義します。

    function [loss,gradients,jac] = modelLoss(net,X,T)
    
    Y = forward(net,X);
    loss = l1loss(Y,T);
    
    X = stripdims(X);
    Y = stripdims(Y);
    
    jac = dljacobian(Y,X,1);
    gradients = dlgradient(loss,net.Learnables);
    
    end

    dlfeval 関数を使用してモデル損失関数を評価します。

    [loss,gradients,jac] = dlfeval(@modelLoss,net,X,T);

    ヤコビアンのサイズを表示します。

    size(jac)
    ans = 1×5
    
         5    16    16     3   128
    
    

    入力引数

    すべて折りたたむ

    ニューラル ネットワークまたはモデル関数の出力。トレースされた dlarray 行列として指定します。

    自動微分を有効にして関数を評価する場合、ソフトウェアは入力 dlarray オブジェクトをトレースします。ソフトウェアが dlarray をトレースするコンテキストには次のものが含まれます。

    • trainnet 関数が評価する損失関数の内部

    • カスタム層が評価する順方向関数の内部

    • dlfeval 関数が評価するモデルとモデル損失関数の内部

    dim 引数で指定されていない次元のサイズは同じでなければなりません。

    入力データ。トレースされた dlarray オブジェクトとして指定します。

    自動微分を有効にして関数を評価する場合、ソフトウェアは入力 dlarray オブジェクトをトレースします。ソフトウェアが dlarray をトレースするコンテキストには次のものが含まれます。

    • trainnet 関数が評価する損失関数の内部

    • カスタム層が評価する順方向関数の内部

    • dlfeval 関数が評価するモデルとモデル損失関数の内部

    dim 引数で指定されていない次元のサイズは同じでなければなりません。

    u の演算次元。正の整数として指定します。

    dljacobian 関数は、データの残りの次元を独立したバッチ次元として扱います。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    高次微分を有効にするフラグ。次のいずれかの値として指定します。

    • 数値または logical 1 (true) — 高次微分を有効にします。自動微分を使用して微分を計算する関数 (dlgradientdljacobiandldivergence、および dllaplacian など) をさらに呼び出したときに、返された値を計算で使用できるように、バックワード パスがトレースされます。

    • 数値または logical 0 (false) — 高次微分を無効にします。バックワード パスはトレースされません。一次微分のみを計算する場合、このオプションを使用すると、通常、処理時間が短縮され、メモリ使用量が節約されます。

    出力引数

    すべて折りたたむ

    ヤコビ行列。形式を整えていない dlarray オブジェクトとして返されます。

    jac のレイアウトは dimu のサイズによって異なります。

    size(u,dim) == 1 である場合、jac は行列で、次のようになります。

    • dim1 である場合、jac(j,k)u(j,k)=ukx(j,k) に対応し、uku(:,k) に対応します。

    • dim2 である場合、jac(k,j)(u)(k,j)=ukx(k,j) に対応し、uku(k,:) に対応します。

    それ以外で、size(u,dim) > 1 である場合、jac は 3 次元配列で、次のようになります。

    • dim1 である場合、jac(i,j,k)(u)(i,j,k)=u(k,i)x(j,k) に対応します。

    • dim2 である場合、jac(i,k,j)(u)(i,k,j)=u(k,i)x(k,j) に対応します。

    バージョン履歴

    R2024b で導入