2017-06-01 20 views
0

私は繰り返しcosine_distanceを計算する必要がある、とtf.losses.cosine_distanceはスカラーテンソルを返すので、私はこのようにそれをやった:2つのベクトル間の距離を効率的に計算する方法は?

x # a tensor list 
    y # a tensor list 
    for i in x: 
    for j in y: 
     distance = tf.losses.cosine_distance(i, j, dim=0) 

このアプローチは大きすぎるし、プログラムのロードグラフは遅すぎます。どのように私はそれを最適化できますか?

答えて

1

ループはテンソルフローが良くありません。 私は

はこのお試しくださいテンソルリスト内のすべてのベクトルが同じ長さで想定しています:

x_t = tf.stack(x) 
y_t = tf.stack(y) 
prod = tf.matmul(x_t, y_t, transpose_b=True) 
x_len = tf.sqrt(tf.reduce_sum(tf.matmul(x_t, x_t), axis=0)) 
y_len = tf.sqrt(tf.reduce_sum(tf.matmul(y_t, y_t), axis=0)) 
cosine_dist = prod/tf.matmul(x_len, y_len, transpose_b=True) 
関連する問題