このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
dlgradient
説明
dlgradient
により、自動微分を使用してカスタム学習ループの微分を計算します。
ヒント
ほとんどの深層学習タスクでは、事前学習済みのニューラル ネットワークを使用して独自のデータに適応させることができます。転移学習を使用して、畳み込みニューラル ネットワークの再学習を行い、新しい一連のイメージを分類する方法を示す例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。または、layerGraph
オブジェクトを関数 trainNetwork
および関数 trainingOptions
と共に使用して、ニューラル ネットワークを作成してゼロから学習させることができます。
タスクに必要な学習オプションが関数 trainingOptions
に用意されていない場合、自動微分を使用してカスタム学習ループを作成できます。詳細については、カスタム学習ループ向けの深層学習ネットワークの定義を参照してください。
[
は、変数 dydx1,...,dydxk
] = dlgradient(y
,x1,...,xk
)x1
~ xk
に対する y
の勾配を返します。
dlfeval
に渡された関数の内部から dlgradient
を呼び出します。自動微分を使用した勾配の計算とDeep Learning Toolbox での自動微分の使用を参照してください。
[
は、勾配を返し、1 つ以上の名前と値のペアを使用して追加のオプションを指定します。たとえば、dydx1,...,dydxk
] = dlgradient(y
,x1,...,xk
,Name,Value
)dydx = dlgradient(y,x,'RetainData',true)
は、後続の dlgradient
の呼び出しで再利用できるように、勾配の中間値を保持します。この構文を使用すると時間を節約できますが、より多くのメモリが使用されます。詳細については、ヒントを参照してください。
例
入力引数
出力引数
制限
カスタム逆方向関数をもつカスタム層が含まれる
dlnetwork
オブジェクトを使用している場合、関数dlgradient
は高次微分の計算をサポートしません。以下の層が含まれる
dlnetwork
オブジェクトを使用している場合、関数dlgradient
は高次微分の計算をサポートしません。gruLayer
lstmLayer
bilstmLayer
関数
dlgradient
は、以下の関数に依存する高次微分の計算をサポートしません。gru
lstm
embed
prod
interp1
詳細
ヒント
dlgradient
は関数の内部で呼び出さなければなりません。勾配の数値を取得するには、dlfeval
を使用して関数を評価しなければなりません。また、関数の引数はdlarray
でなければなりません。Deep Learning Toolbox での自動微分の使用を参照してください。勾配を正しく評価するため、引数
y
にはdlarray
をサポートしている関数のみを使用しなければなりません。dlarray をサポートする関数の一覧を参照してください。名前と値のペアの引数
'RetainData'
をtrue
に設定すると、微分の計算後、直ちにトレースが消去されず、関数dlfeval
の呼び出し中はトレースが保持されます。この保持により、同じdlfeval
呼び出し内の後続のdlgradient
呼び出しが高速になりますが、より多くのメモリが使用されます。たとえば、敵対的ネットワークに学習させる場合、'RetainData'
を設定すると、学習中に 2 つのネットワーク間でデータと関数が共有されるため、便利です。敵対的生成ネットワーク (GAN) の学習を参照してください。1 次微分のみを計算する必要がある場合は、
'EnableHigherDerivatives'
オプションがfalse
になっていることを確認してください。これにより、通常、処理時間が短縮され、メモリ使用量が節約されます。複素勾配はウィルティンガーの微分を使用して計算されます。勾配は、微分する関数の実数部が増加する向きで定義されます。これは、関数が複素数であっても微分する変数 (損失など) は実数でなければならないためです。
拡張機能
バージョン履歴
R2019b で導入