2017-02-27 3 views
2

Ich habe zwei Tensoren.Reduzierung von zwei Tensoren in Tensorflow

  1. Ein Tensor \sum_{n=1}^N der Form (1, N)
  2. Ein Tensor \sum_{n=1}^N der Form (N, T)

Was ich will ist die folgende skalare berechnen:

\sum_{n=1}^N

tf.reduce_sum schien hilfreich, aber ich konnte nicht meinen Kopf rund um die Kombination der beiden Tensoren und Funktionen zu reduzieren bekomme was ich will. Kann mir jemand helfen, die obige Gleichung in tensorflow zu schreiben?

+0

Habe ich richtig verstanden, dass Sie möchten, dass dies ein Einzeiler ist? – kaufmanu

+0

Nicht unbedingt. Es muss nicht "eine Reduzierungsfunktion" sein. Ich werde diesen Teil bearbeiten. Jede Lösung ist willkommen! – alpaca

Antwort

1

Funktioniert das?

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)) 

Dies berechnet den obigen Ausdruck für jeden t von 0 bis T-1, so ist es nicht ein Skalar, sondern ein Vektor der Größe (T,). Ihre Frage erwähnt, dass Sie nur einen Skalar berechnen möchten, aber die Summe ist nur über N und nicht über T, also nahm ich an, dass Sie möchten, dass dieser Ausdruck für jede t ausgewertet wird.

Verwandte Themen