2017-02-05 4 views
1

Ich würde gerne Tensoren durch beide Dims in Tensorflow verketten.Wie verkettet man Tensoren durch beide zwei Dims in Tensorflow

Zum Beispiel gibt es vier Tensoren mit 4 Dimensionen. Alle Tensoren sind so etwas wie Bilder im Tensorfluss, also bedeutet jede Dimension Folgendes: [Stapelgröße, Bildbreite, Bildhöhe, Bildkanalgröße].

import tensorflow as tf 

image_tensor_1 = 1*tf.ones([60, 2, 2, 3]) 
image_tensor_2 = 2*tf.ones([60, 2, 2, 3]) 
image_tensor_3 = 3*tf.ones([60, 2, 2, 3]) 
image_tensor_4 = 4*tf.ones([60, 2, 2, 3]) 

image_result_wanted = ... # Some operations here 

sess = tf.Session() 
print(sess.run([image_result_wanted]) 

Ohne Berücksichtigung etwa Chargengröße und Kanalgröße (ich will sagen, nur unter Berücksichtigung etwa Bildbreite und Bildhöhe), ich möchte folgendes arbeiten:

[[1, 1, 2, 2], 
[1, 1, 2, 2], 
[3, 3, 4, 4], 
[3, 3, 4, 4]] 

So image_result_wanted 's Form sollte (60, 4, 4, 3) sein.

Wie soll ich mit dieser Operation umgehen?

Antwort

3

Sie können tf.concat verwenden, um die Tensoren entlang der Achse zu verbinden.

hier:

import tensorflow as tf 

image_tensor_1 = 1*tf.ones([60, 2, 2, 3]) 
image_tensor_2 = 2*tf.ones([60, 2, 2, 3]) 
image_tensor_3 = 3*tf.ones([60, 2, 2, 3]) 
image_tensor_4 = 4*tf.ones([60, 2, 2, 3]) 

try: 
    temp_1 = tf.concat_v2([image_tensor_1, image_tensor_2], 2) 
    temp_2 = tf.concat_v2([image_tensor_3, image_tensor_4], 2) 
    result = tf.concat_v2([temp_1, temp_2], 1) 
except AttributeError: 
    temp_1 = tf.concat(2, [image_tensor_1, image_tensor_2]) 
    temp_2 = tf.concat(2, [image_tensor_3, image_tensor_4]) 
    result = tf.concat(1, [temp_1, temp_2]) 


sess = tf.Session() 
print sess.run([result[0,:,:,0]]) 
2

haben wirklich keine Ahnung, wie dies in einer Zeile zu tun, also habe ich mit den folgenden kommen:

import tensorflow as tf 

image_tensor_1 = 1 * tf.ones([60, 2, 2, 3]) 
image_tensor_2 = 2 * tf.ones([60, 2, 2, 3]) 
image_tensor_3 = 3 * tf.ones([60, 2, 2, 3]) 
image_tensor_4 = 4 * tf.ones([60, 2, 2, 3]) 

# make two tensors with shapes of [60, 2, 4, 3] 
concat1 = tf.concat(2, [image_tensor_1, image_tensor_2]) 
concat2 = tf.concat(2, [image_tensor_3, image_tensor_4]) 
# stack two tensors together to obtain desired result with shape [60, 4, 4, 3] 
result = tf.concat(1, [concat1, concat2]) 

folgenden Code:

sess = tf.Session() 
print(sess.run(result[0, :, :, 0])) 

Ergebnisse mit

[[ 1. 1. 2. 2.] 
[ 1. 1. 2. 2.] 
[ 3. 3. 4. 4.] 
[ 3. 3. 4. 4.]] 

wie gewünscht.

Zu spät, haha ​​:)

+1

Sorry Bruder :) – indraforyou

Verwandte Themen