問題タブ [autograd]

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 投票する
3 に答える
48010 参照

python - PyTorch の「detach()」と「with torch.nograd()」の違いは?

計算の要素を勾配計算から除外する 2 つの方法を知っていますbackward

方法 1:使用with torch.no_grad()

方法 2:使用.detach()

これら2つに違いはありますか?どちらにもメリット/デメリットはありますか?

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

python - なんらかの変換によってパラメータを定義する OR グラフ全体ではなくサブグラフを保持する

今まで見たことのない問題に出くわしています。私はベイジアン機械学習に取り組んでおり、PyTorch のディストリビューションをよく利用しています。よくあることの 1 つは、分布のパラメーターのいくつかをパラメーターの対数で定義することです。これにより、最適化で負になることはありません (正規分布の標準偏差など)。

ただし、分布に依存しないようにするために、このパラメーターの変換を手動で再計算する必要はありません。例を介して実証するには:

次のコードは実行されません。最初の後方パスの後、パラメーターの指数関数を計算するグラフの部分は自動的に削除され、再度追加されることはありません。

次のコード セットは実行されlog_stdますが、ループ内でパラメーターを明示的に参照し、ディストリビューションを再作成する必要があります。分散タイプを変更したい場合、特定のケースを考慮しないと不可能です。

ただし、グラフが静的であるため、最初の例は Tensorflow で機能します。これを修正する方法について誰かアイデアがありますか? 関係を定義するグラフの部分のみを保持することが可能であれば、std = torch.exp(log_std)これはうまくいく可能性があります。逆方向勾配フックも試してみましたが、残念ながら、新しい勾配を適切に計算するには、パラメーター値と学習率にアクセスする必要があります。

前もって感謝します!マイケル

編集

ディストリビューションを変更する方法の例を求められました。現在機能しないコードを取得し、分布をガンマ分布に変更します。

ただし、現在動作しているコードを見ると:

そして、アルゴリズムが機能するようにするには、ループ内のコードを変更する必要があることがわかります。この小さな例では大きな問題ではありませんが、これは、心配する必要がないことが信じられないほど有益な、はるかに大きなアルゴリズムのデモンストレーションにすぎません。