我需要反复计算cosine_distance
,tf.losses.cosine_distance
会返回一个标量Tensor,所以我这样做了:
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)
这种方法使图形太大,程序加载速度太慢。我该如何优化呢?
答案 0 :(得分:2)
循环在张量流中没有好处。 我假设张量列表中的所有向量长度相等
试试这个:
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)