問題タブ [autodiff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
365 参照

c++ - 固有値: 自動/記号微分

Eigen 要素で動作する cpp auto/symb diff ライブラリを探しています。私が必要とする重要な機能の 1 つは、微分関数 (または式ツリー) が一度計算されると、複数のポイントで評価できることです (最適化に使用します)。

これまでに検討したオプション:

  1. Eigen の autodiff モジュール。サポートされていないため、その機能についてはわかりません。

  2. autodiff.github.io. 私が必要とする機能がありません: 導関数はすべての点で再計算する必要があります。

  3. カサディ。Eigen には対応していません。さらに、cpp に関するドキュメントは貧弱で時代遅れ (少なくともベクトル代数の場合) であり、cpp から直接操作することは推奨されていないように感じます。

0 投票する
1 に答える
146 参照

type-conversion - JuliaでのForwardDiffの出力のプロット

ForwardDiff.jlこの機能を使用して関数を定義し、その勾配をプロットしたいだけです(を使用して評価ForwardDiff.gradient)。の出力ForwardDiff.gradientはこの奇妙なDual型のものであり、目的の型 (私の場合は Float32 の 1-D 配列) に簡単に変換されないため、機能していないようです。

そして、これは私が得るエラーです:

の型を検査するとgrad_f(x_values)、次のようになります。

Array{Array{ForwardDiff.Dual{ForwardDiff.Tag{typeof(g),Float32},Float32,12},1},1}

たとえば、ForwardDiff のドキュメントの例でそれが起こらないのはなぜですか? ここを参照してください: https://github.com/JuliaDiff/ForwardDiff.jl

前もって感謝します。

編集: Kristoffer Carlsson のコメントの後: 私はこれを試しましたが、まだ動作しません。私がここで試したものと彼が提案したものとの違いがわかりません:

エラーは次のようになります。

このエラーは∂g∂x(x)、ブロードキャスト バージョンを使用しているかどうかに関係なく、を呼び出したときに発生します∂g∂x.(x)。関数定義と関係があると思いますが、1行で定義されていないことを除けば、私が定義した方法がクリストファーのバージョンとどのように違うのかわかりません...これはとても混乱しています。

ForwardDiffのドキュメントによると、入力のタイプがReal-Float32のサブタイプであり、Real のサブタイプである必要があるため、これは機能するはずです。

編集:他の人からのコメントを読んだ今、関数を制限して抽象型の入力を受け入れるのに十分な汎用性を持たせる必要があることに気付きましたReal。混乱をお詫び申し上げます。

0 投票する
1 に答える
270 参照

tensorflow - テンソルフロー勾配テープを使用したヘッセ行列の計算

この問題に関心をお寄せいただきありがとうございます。

tensorflow.keras.Model のヘッセ行列を計算したい

高次の派生物については、ネストされた GradientTape.# サンプル グラフと入力を試しました

そしてまた試練…

g wrt x の勾配を計算できないのはなぜですか?