のためのpythonで遅すぎますK個の合計クラスの中から、行列Sを返します。ここで、S.shape = (N,K)
(N:与えられたデータの行とKは合計クラスです)。Tensorflowは2を言うことができます、私は<strong>にTensorflow</strong>、与えられたデータXのライン毎に、唯一のいくつかのサンプリングされたクラスに対して<strong>ソフトマックス</strong>関数を適用していることを関数を作成したいループ
最後に、行列Sは、サンプリングされたクラスによってすべての行について定義されたインデックスにゼロとゼロ以外の値を含むことになります。
シンプルなpythonでは、私はという高度な索引付けを使用していますが、Tensorflowではどのように作成するかわかりません。私の最初の質問はthis, where I present the numpy codeでした。
Tensorflowで解を見つけようとしましたが、主なアイデアは2-d行列としてSを1-d配列として使用することではありませんでした。コードは次のようになります。
num_samps = 2
S = tf.Variable(tf.zeros(shape=(N*K)))
W = tf.Variable(tf.random_uniform((K,D)))
tfx = tf.placeholder(tf.float32,shape=(None,D))
sampled_ind = tf.random_uniform(dtype=tf.int32, minval=0, maxval=K-1, shape=[num_samps])
ar_to_sof = tf.matmul(tfx,tf.gather(W,sampled_ind),transpose_b=True)
updates = tf.reshape(tf.nn.softmax(ar_to_sof),shape=(num_samps,))
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for line in range(N):
inds_new = sampled_ind + line*K
sess.run(tf.scatter_update(S,inds_new,updates), feed_dict={tfx: X[line:line+1]})
S = tf.reshape(S,shape=(N,K))
これは動作しており、結果は期待されています。しかし、それはが極端に遅いを実行しています。なぜそれが起こっているのですか?どのように私はその仕事をより速くすることができますか?
おかげで多くをコピーしないようになるん正確に私の質問に答える!しかし、問題は依然として残っています。マトリックスSを作成するためのコードは、これよりもまだまだ高速です。そして私はテンローロー関数のみを使っています...なぜそれが起こるか知っていますか?私はスピードを上げるためにC++で新しいオペレーションを作成する必要がありますか? –
速くすると20%速くなり、20倍速くなりますか? CPUで20%遅いテンソルフローが予想される動作です。 CUDA対応の優れたGPU(それを使用するテンソルフローインストール)をお持ちですか? Tensorflowは、GPU /クラスタを使用する状況を想定しています。 – sygi