2017-07-28 5 views
0

Ich habe ein Sobel-FilterWie wird die dritte Dimension im Tensorflow übertragen?

sobel_x = tf.constant([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], tf.float32) 

Ich möchte für einen Augenblick eine Tiefe von 64. Die Form erhalten ist [3,3,1], aber es sollte in [3,3,64] führen.

Wie geht das? Mit der folgenden Zeile bekomme ich Formfehler.

tf.tile(sobel_x, [1, 1, 64]) 



ValueError: Shape must be rank 2 but is rank 3 for 'Tile' (op: 'Tile') with input shapes: [3,3], [3]. 

Antwort

0

Der Grund, warum Sie nicht senden können, ist, dass die dritte Dimension nicht existiert, und so haben Sie tatsächlich einen Rang 2 Tensor.

Wir können dieses Problem lösen, indem wir zuerst den Tensor umformen.

>>> sobel_x = tf.reshape(sobel_x, [3, 3, 1]) 
>>> tf.tile(sobel_x, [1, 1, 64]) 
<tf.Tensor 'Tile_6:0' shape=(3, 3, 64) dtype=float32> 
0

Ich denke, Ihr Problem ist mit sobel_x.

sobel_x.get_shape(): TensorShape([Dimension(3), Dimension(3)]) sobel_x: <tf.tensor 'Const:0' shape=(3, 3) dtype=float32

So sobel_x ist eine zwei Dimension Matrix und Ihre einen Rang 3 eingegeben Kachel daher den Fehler übergeben.

Fix: Machen sobel_x 3 dimensional, so dass die Form shape=(3, 3, 1) dann tf.tile(sobel_x, [1, 1, 64] ausgeben wird shape=(1, 1, 64)

ist
Verwandte Themen