2016-11-12 3 views
0

을 기준으로 텐서의 각 요소에 대한 최소 거리를 계산할 때, 나는 알려진 세트와 관련하여 텐서의 손실을 계산하려고합니다.tensorflow를 사용하여 다른 텐서

주어진 :

[0.0, 0.0499, 0.02] 

내가 함께 한 번에 각을 통해 추측 가고 값 찾을 수 있습니다 :

targets = [[.1,.2,.3],[.3,.2,.1],[.5,.3,.5],[.5,.5,.5],[.6,.8.,9]] 
guesses = [[.5,.5,.5],[.3,.3,.4],[.5,.6,.4]] 

내가 반환 할

for i in range(guesses): 
    tf.reduce_min(tf.reduce_sum(tf.square(targets - guesses[i]),1)) 

을 tensorflow이있다 함수를 사용하면 더 효율적으로 값을 계산할 수 있습니까?

답변

1

뭔가 :

import numpy as np 
import tensorflow as tf 

targets = np.array([[.1,.2,.3],[.3,.2,.1],[.5,.3,.5],[.5,.5,.5],[.6,.8,.9]]) 
guesses = np.array([[.5,.5,.5],[.3,.3,.4],[.5,.6,.4]]) 

targets = tf.reshape(targets,(5, 1, 3)) 
goal = tf.reduce_min(tf.reduce_sum(tf.square(targets - guesses), 2), 0) 
sess = tf.Session() 
o = sess.run(goal) 
print o 
+0

와우, 그건 아주 영리합니다. 고맙습니다. –

0

이 계산을 실행하는 데는 대략적인 방법이 있습니다. 두 가지 고전적인 방법은 스펙트럼 클러스터링과 K 평균 클러스터링입니다. 그들은 각각 두 가지 문제를 해결합니다. 1) 큰 차원의 벡터를 가지고 있습니다. 2) 많은 수의 대상이 있습니다. 그것들은 결합 될 수 있고 신경망을 사용하여 일반화 될 수 있습니다. 둘 다 tensorflow에서 표현 가능해야합니다.

스펙트럼 클러스터링에서 입력 벡터의 낮은 차원의 근사값을 찾은 다음 거기에서 완전하고 포괄적 인 검색을 실행합니다.

K-means 클러스터링에서는 대상 클러스터의 "대표"인 소수의 대상 (중심이라고 함)을 찾습니다. 중심선에 대한 철저한 검색을 실행합니다. 그런 다음 다른 모든 대상을 무시하고 중심선과 연결된 대상에 대해 다른 검색을 실행합니다. 그래서 만약 당신이 100 centroid를 가지고 있다면, 당신은 100의 factor만큼 계산을 줄일 수 있습니다. 당신이 완전히 연결된 bipartite graph로 생각한다면, tree 구조를 가진 레이어를 추가하는 것과 같습니다.

참고 : 위의 문제에서 텐서 연산으로 추측에 대한 루프를 변경할 수 있습니다. 같은

+0

내 루프는 "텐서 작업"을 사용하여 언급. tf.while_loop() 같은 것을 의미합니까? 나는 그것이 어떻게 구성 될지 고심하고있다. –

+0

아니요, 하나의 작업 만 실행하려면 위의 MMN에서 대답을 참조하십시오. – drpng

관련 문제