メインコンテンツ

dldivergence

深層学習データの発散

R2024b 以降

    説明

    発散深層学習演算は、指定された入力データと演算次元に関して、ニューラル ネットワークとモデル関数の出力の数学的な発散を返します。

    div = dldivergence(u,x,dim) は、指定された演算次元のデータ x に関してニューラル ネットワークまたはモデル関数の出力 u を偏微分したものの合計を返します。

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

    すべて折りたたむ

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

    numChannels = 3;
    
    layers = [
        featureInputLayer(numChannels)
        fullyConnectedLayer(numChannels)
        tanhLayer];
    
    net = dlnetwork(layers);

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

    numObservations = 128;
    
    X = rand(numChannels,numObservations);
    X = dlarray(X,"CB");
    
    T = rand(numChannels,numObservations);
    T = dlarray(T,"CB");

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

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

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

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

    発散のサイズを表示します。

    size(div)
    ans = 1×2
    
         1   128
    
    

    入力引数

    すべて折りたたむ

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

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

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

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

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

    ux のサイズは一致しなければなりません。

    入力データ。トレースされた dlarray 行列として指定します。

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

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

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

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

    ux のサイズは一致しなければなりません。

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

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

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

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

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

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

    出力引数

    すべて折りたたむ

    発散。形式を整えていない 1 行 N 列の dlarray オブジェクトとして返されます。ここで、N はデータのバッチ次元のサイズです。div(n) の値は div u(:,n)=·u(:,n)=i=1Ku(i,n)x(i,n) です。ここで、K はデータの演算次元のサイズ、i は演算次元のインデックス、n はバッチ次元のインデックスです。

    バージョン履歴

    R2024b で導入