問題タブ [numpy-einsum]

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 に答える
144 参照

algorithm - 行列が繰り返されるが下付き文字が異なる場合の Einstein 総和の最適化

免責事項:数学スタック交換または何らかの種類への投稿についてはしました。しかし、数学を専攻している友人から、彼らは Einstein Summation を実際にはあまり使用していないと聞きましたが、機械学習がそれを多く使用していることは知っています。したがって、この問題をここに投稿しました(アルゴリズムのパフォーマンスの最適化として)。

行列計算に関する調査を行っているとき (たとえば、要素ごとの乗算が少なくとも必要な回数)、次の勾配を計算しようとしていました。

ハイレベル方程式

ここでABCは、最初の軸で 3 つの行列を縮小することを意味します(たとえば2x32x4、 、および2x53x4x5、 -2軸が合計されます)。基本的に、 に対する 3-matrix-contraction のノルムの勾配を計算ABCAます。次に、再び に対する勾配のノルムを計算しAます。

これは次と同等です。

伝統的な書き方

または少し単純化します (によって証明されていますautograd):

ここに画像の説明を入力

これは Einstein Summation 形式で記述できます ( 、einsumなどの多くのパッケージの関数で使用されます)。numpytensorflow

これを書いているとき、私は行列を見つけBC、合計を何度も繰り返しています。これらの「たくさんの B と C」を何らかの行列乗数に単純化できるのでしょうか? これにより、対数的に高速になるはずです。手動で単純化しようとしましたが、わかりませんでした。

どうもありがとう!私が言っていることが正しくない場合は、修正してください。

0 投票する
0 に答える
810 参照

numpy - numpy einsum を使用して高次元減算ブロードキャストを実行する

放送減算で困っています。私の問題は次のとおりです。L は整数、N は問題の変数の数であるxshapeの配列があります。各要素に含まれる配列[L,N]を計算する必要があります。L=1 の場合、これは減算でブロードキャストを実行することと同じです。[L,N,N]l,i,jx[l,i]-x[l,j]x-x.T

たとえば、L=1 で N=3 の場合:

しかし、次元 L を大きくすると、物事はより複雑になり、np.einsum関数の領域に入ります。そこで、L=2 の場合に、2 つの行を複製した例を再作成しようとしました。私が期待するのは、等しい要素を持つ 2 つの 3x3 行列を持つ 2x3x3 配列を取得することです。

返す

しかし、numpy einsum でこれを作成する方法は? 次の製品しか入手できません。

数値が大きくなったバッチ処理された減算または加算の特定の例はありますか?