2017-06-21 6 views
0

ich zwei Tensoren Form haben [1,4] sagen,Keras Individuelle Zusammenführen von zwei Tensoren

[1,2,3,4] [0.2,0.3,0.4,0.5]

Now I wollen, dass sie in Verschmelzungsschicht verschmelzen (vielleicht einige benutzerdefinierte Funktion Tensorflow Backend), so dass sie

[1,0.2,2,0.3,3,0.4,4,0.5]

werden Wie kann ich erreichen, Dies? Die Form des Tensors ist festgelegt. Vielen Dank für Ihre Zeit.

Antwort

0

Mit Tensorflow können Sie reshape und concat verwenden. Diese Operationen sind auch im keras-Backend verfügbar.

a = tf.constant([1,2,3,4]) 
b = tf.constant([10,20,30,40]) 

c = tf.reshape(tf.concat([tf.reshape(a,(-1,1)), tf.reshape(b, (-1,1))], 1), (-1,)) 

Ich weiß nicht, ob es einen einfacheren Weg gibt, dies zu erreichen.

Bearbeiten: Es gibt eine einfachere Lösung mit tf.stack anstelle von tf.concat.

c = tf.reshape(tf.stack([a, b], 1),(-1,)) 
+0

Diese sehr präzise ist, aber ich bin nicht in der Lage das herauszufinden Bedeutung von -1 als Wert der Achse. Kannst du es ein wenig erklären? Die Lösung funktioniert jedoch. –

+0

In diesem Fall ist '(-1,)' dasselbe wie '[-1]'. Laut TF doc: "Wenn eine Komponente der Form der spezielle Wert -1 ist, wird die Größe dieser Dimension berechnet, so dass die Gesamtgröße konstant bleibt. Insbesondere flacht eine Form von [-1] in 1-D ab Die meisten Komponenten der Form können -1 sein. –

+0

Danke. Kristallklar. –

1

Eine mögliche Lösung ist die Tensoren entlang der Achse 0 und dann sammeln, die Werte entsprechend den Indizes verketten, wie die

import tensorflow as tf 
from itertools import chain 

A = tf.constant([1, 2, 3, 4]) 
B = tf.constant([0.2, 0.3, 0.4, 0.5]) 

# Cast A to be compatible with B 
A = tf.cast(A, tf.float32) 

# Concat AB one next to the other 
AB = tf.concat([A, B], axis=0) 

# Generate a list of values in this sequence 
# 0, 4, 1, 5, ... in other to indicize the tensors 
# use gather to collect values in the specified positions 
NEW = tf.gather(AB, 
       list(
        chain.from_iterable((i, i + A.shape[0].value) 
             for i in range(A.shape[0].value)))) 

with tf.Session() as sess: 
    print(sess.run([NEW])) 
+0

Danke. Es funktioniert gut. –

+0

Gern geschehen! Wenn ich Ihr Problem gelöst habe, denken Sie bitte daran, die Antwort als akzeptiert zu markieren! – nessuno