EDIT Mein Problem ist die Breite und Höhe meines Filter berechnet Spiel, falsch verstanden ich die API doc ... jetzt auf Korrektur arbeitenTensorflow conv2d_transpose (deconv) Anzahl der Reihen von out_backprop nicht
SOLUTION Folgen Entfaltungs von here Schlitten 53
ich habe ein ähnliches Problem wie here aber es ist ein wenig funkier.
Mein Fehler ist Conv2DBackpropInput: Number of rows of out_backprop doesn't match computed: actual = 25, computed = 26
zum Zeitpunkt der Initialisierung des Optimierers.
... also ist es um 1?
Einige Hintergrundinformationen ...
Ich habe eine konv Schicht mit den Abmessungen <tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>
Das Eingangsbild ist 200x200, und ich habe 3 maxpool Schichten - also die h = w = 25. Ich möchte füge 3 Dekonvierungslayer hinzu, so dass ich die ursprüngliche Auflösung zurückgebe (ich mache eine Bildsegmentierung).
Der deconv Code wie folgt aussieht:
temp_batch_size = tf.shape(x)[0]
# output_shape = tf.pack([temp_batch_size, 50, 50, 64])
output_shape = [temp_batch_size, 50, 50, 64]
conv4 = tf.nn.conv2d_transpose(conv3, weights['wdc1'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv4 = tf.nn.local_response_normalization(conv4)
# output_shape = tf.pack([temp_batch_size, 100, 100, 32])
output_shape = [temp_batch_size, 100, 100, 32]
conv5 = tf.nn.conv2d_transpose(conv4, weights['wdc2'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv5 = tf.nn.local_response_normalization(conv5)
# output_shape = tf.pack([temp_batch_size, 200, 200, 1])
output_shape = [temp_batch_size, 200, 200, 1]
conv6 = tf.nn.conv2d_transpose(conv5, weights['wdc3'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv6 = tf.nn.local_response_normalization(conv6)
(Sie können sehen, ich versuchte zu tf.pack()
zu keinem Erfolg - wie here empfohlen) Wo die Gewichte:
'wdc1' : tf.Variable(tf.random_normal([25, 25, 64,128])),
'wdc2' : tf.Variable(tf.random_normal([50, 50, 32,64])),
'wdc3' : tf.Variable(tf.random_normal([100, 100, 1,32])),
Einige Debugging sieht aus wie dies:
(Pdb) conv3
<tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>
(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(?, ?, ?, ?) dtype=float32>
Ich finde es seltsam, dass, weil ich t Er Linie temp_batch_size = tf.shape(x)[0]
(wie empfohlen here), sind die letzten 3 Dimensionen auch Fragezeichen? Wenn ich die erste Dimension in eine Konstante (wie 10) ändere, bekomme ich <tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>
Also ist das vielleicht Teil meines Problems? Wenn ich es wieder auf eine Konstante batch_size
ändere, bekomme ich den Fehler ValueError: Shapes (10, 101, 101, 32) and (10, 100, 100, 32) are not compatible
zum Zeitpunkt der Initialisierung des Optimierers. Wieder einmal um eins.
Debuggen mit dieser Konfiguration ...
(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(10, 100, 100, 32) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(10, 200, 200, 1) dtype=float32>
Ist die Frage der Fortschritte meine Nummer? Was sie sein sollten (ich verschiedene Variationen ohne Erfolg versucht haben)
Danke Olivier! Genau das habe ich getan! –
BTW, vergessen Sie nicht die ReLUs –
ah guten Fang! Vielen Dank! –