2017-05-08 4 views
0

Ich verwende 3D Convolution für mein Netzwerk. In einem Knoten meines Netzwerks muss ich mein Bild von [5,50,50,10,256] auf [5,100,100,10,256] skalieren. Ich möchte nur Achse 1 und Achse 2 meines Bildes verkleinern.Größe 3D-Bild mit 5D Tensor in Tensorflow

Ich habe versucht, tf.image.resize_images zu verwenden, aber es scheint, dass es nur auf 3D or4D Tensoren funktioniert.

Irgendein Vorschlag was kann ich tun?

Antwort

1

Kein Problem, wir können immer noch tf.image.resize_images verwenden. Was wir tun müssen ist, senden Sie die Daten an tf.image.resize_images in der Form, die es braucht, das ist ein Tensor (4D).

# First reorder your dimensions to place them where tf.image.resize_images needs them 
transposed = tf.transpose(yourData, [0,3,1,2,4]) 

# it is now [5,10,50,50,256] 
# but we need it to be 4 dimensions, not 5 
reshaped = tf.reshape(transposed, [5*10,50,50,256]) 

# and finally we use tf.image.resize_images 
new_size = tf.constant([ 100 , 100 ]) 
resized = tf.image.resize_images(reshaped , new_size) 

# your data is now [5*10,100,100,256] 
undo_reshape = tf.reshape(resized, [5,10,100,100,256]) 

# it is now [5,10,100,100,256] so lastly we need to reorder it 
undo_transpose = tf.transpose(undo_reshape, [0,2,3,1,4]) 

# your output is now [5,100,100,10,256] 
+0

Danke für die Antwort. Es war so schlau. Darf ich fragen, warum Sie den Tensor auf den ersten Platz setzen? Ist es nicht besser, zuerst einen [5,50,50,10,256] Tensor auf einen [5,50,50,10 * 256] Tensor umzuformen und nach einer Größenanpassung auf [5,100,100,10 * 256] ihn auf [5,100,100] umzuformen , 10,256]? So können wir eine zusätzliche Transponierung vermeiden. –

+0

Dooh! Du hast Recht. das wäre einfacher! – Wontonimo

Verwandte Themen