2017-04-19 4 views
0

Tensorflowの行列要素の多様性の概念を効率的に実装して、ニューラルネットワークトレーニングの各繰り返しで実行できるようにしたいと考えています。より正確には、Tensorflowの広い範囲にわたる行列のバンド幅(またはスペクトル)の計算

  • 入力:大行列、Kが大きい[0,2^K)の範囲の整数H x LA
  • 出力:整数のベクトル、またはマトリックスのスペクトル H*L + 1s[i]の整数は、i回繰り返される[0, 2^K)の整数を表します。
  • 計算上の考慮事項:H x L = 32*400およびK = 16。この手順は、ニューラルネットワークの各繰り返しで実行する必要があります。

例:

A = [[0,0,0,1,1,2,2], 
    [3,4,4,4,4,5,6]] 
K = 3 
s = [1,2,2,1,1,0,0,0,0,0,0,0,0,0,0] 

単純なアプローチ

I = tf.one_hot(A) #Shape: H x L x 2^K 
y = tf.reduce_sum(tf.reduce_sum(I,0),1) # Shape: 2^K 
s = tf.bincount(y, minLength = H*L + 1) # Shape: H*L + 1 

残念ながら、このアプローチの主な問題は、適度Kのサイズのためone_hotフォームに拡大することは計算上不可能になることですメモリ不足の問題にも対処できます。 Tensorflowでこれを行うより効率的な方法がありますか?

答えて

0

行列上でbincountを一度呼び出すと、位置iに要素iの数があるベクトルが得られます。次に、bincountを呼び出すと、位置cにあるベクトルがcount cの要素の数になります。これはあなたが望むと思うものです。

関連する問題