2017-12-23 39 views
0

두 개의 2D 텐서 형태 (m X d와 n X d)가 있습니다. 최적화 된 (for 루프가없는) 또는이 두 개의 텐서 사이의 쌍 방향 유클리드 거리를 계산하는 tensorflow 방식은 무엇입니까? 그러면 출력 텐서 형태 m X n을 얻을 수 있습니다. 궁극적으로 크기 m x n의 공분산 행렬을 얻기 위해 가우스 커널의 제곱 된 항을 만드는 데 필요합니다. enter image description hereTensorFlow에서 다차원 입력 사이의 쌍 방향 유클리드 거리를 계산하십시오.

등가 최적화되지 않은 NumPy와 코드는 내가 here 도움을 복용하여 답을 발견이

difference_squared = np.zeros((x.shape[0], x_.shape[0])) 
for row_iterator in range(difference_squared.shape[0]): 
    for column_iterator in range(difference_squared.shape[1]): 
     difference_squared[row_iterator, column_iterator] = np.sum(np.power(x[row_iterator]-x_[column_iterator], 2)) 

답변

0

과 같을 것이다. 두 개의 텐서가 x1과 x2이고 크기가 m × d와 n × d라고 가정하고, 쌍의 유클리드 거리는 각각

tile_1 = tf.tile(tf.expand_dims(x1, 0), [n, 1, 1]) 
tile_2 = tf.tile(tf.expand_dims(x2, 1), [1, m, 1]) 
pairwise_euclidean_distance = tf.reduce_sum(tf.square(tf.subtract(tile_1, tile_2)), 2))