0

シンプルだが大きなデータファイルがあります。これは、ニューラル ネットワーク シミュレーションからの出力です。最初の列は時間ステップ、1..200 です。2 番目はターゲット ワードです (現在のシミュレーションでは 1..212)。次に、単語ごとに 1 つずつ、合計 212 の列があります。つまり、各行には、特定のターゲット (入力) 単語が与えられた特定の時間ステップでの各単語ノードの活性化値があります。

各活性化を応答強度 (exp(定数 x 活性化)) に変換し、各応答強度を応答強度の行の合計で割るなど、簡単な操作を行う必要があります。R でこれを行うのは非常に遅く (20 分)、perl で従来のループ処理を行うと高速ですが、後のシミュレーションで数千ワードが必要になるため、それでも時間がかかります (7 分)。

PDL はこれをはるかに迅速に実行できるように思われます。PDL のドキュメントを読んでいますが、2 番目の手順を実行する方法がわかりません。最初のものは、アクティベーション列だけを選択して $act に入れるのと同じくらい簡単に思えます。

$rp = exp($act * $k);

しかし、各値を行の合計で割る方法がわかりません。アドバイスをいただければ幸いです。

ありがとう!

4

1 に答える 1

1

マトリックスのコピーを作成し、最初のものを使用して読み取り、2番目のものを使用して書き込む必要があるようです。注: for $loop() { の代わりに $c++ を使用すると、より効率的になる可能性があります。}

$x = sequence(3,3)*2+1;
 [ 1  3  5]
 [ 7  9 11]
 [13 15 17]
$y .= $x; # if you use = here it will change both x and y 
for $c(0..2) { for $d(0..2) {  $y($c,$d) .= $y($c,$d) / sum($x(,$d))  }} 
p $y;
  [0.11111111 0.33333333 0.55555556]
  [0.25925926 0.33333333 0.40740741]
  [0.28888889 0.33333333 0.37777778]
于 2016-01-31T05:23:43.730 に答える