2017-02-27 7 views
2

두 개의 텐서가 있습니다.Tensorflow에서 두 개의 텐서를 줄입니다.

  1. 텐서 형상 \sum_{n=1}^N (1, N)
  2. 텐서 형상 \sum_{n=1}^N (N, T)

무엇 I 계산하려는 것은 다음 스칼라 :

\sum_{n=1}^N

tf.reduce_sum 도움이 되긴했지만 두 개의 텐서를 결합하여 기능을 축소 할 수는 없었습니다. 내가 원하는 것을 얻으십시오. 누군가 위의 방정식을 쓰는 방법을 도와 줄 수 있습니까 tensorflow?

+0

이것이 원 라이너라고 올바르게 알고 있습니까? – kaufmanu

+0

반드시 그렇지는 않습니다. 그것은 "one reduce function"일 필요는 없습니다. 나는 그 부분을 편집 할 것이다. 모든 솔루션을 환영합니다! – alpaca

답변

1

이 방법이 효과가 있습니까?

import tensorflow as tf 
import numpy as np 

N = 10 
T = 20 
l = tf.constant(np.random.randn(1, N), dtype=tf.float32) 
z = tf.constant(np.random.randn(N, T), dtype=tf.float32) 

with tf.Session() as sess: 
    # swap axis for broadcasting to work 
    l = tf.transpose(l, [1, 0]) 
    z_div_l = tf.divide(z, l) 
    z_div_l_2 = tf.divide(1.0 - z, 1.0 - l) 
    result = tf.reduce_sum(tf.add(z_div_l, z_div_l_2), axis=0) 
    eval_result = sess.run(result) 
    print('{}\n{}'.format(eval_result.shape, eval_result)) 

이 T-0에서 1까지의 모든 t 대한 상기 식을 계산하고, 그래서 스칼라하지만 (T,) 크기의 벡터 아니다. 귀하의 질문에 단지 하나의 스칼라를 계산하려는 경우, 합계는 N 이상이고 T 이상이 아니므로,이 표현식을 모든 t에 대해 평가하기를 원한다고 가정했습니다.