2016-10-29 6 views
0

Ich habe den folgenden Codeschnipsel zu deconv zu tun.Tensorflow conv2d_transpose Shape

x.get_shape() gibt mir (?, 14, 14, 128)

self.w.get_shape() gibt mir (3, 3, 64, 128)

output_shape sein sollte (?, 14, 14, 64) ist

Filtergröße [3, 3], stride ist [1, 1, 1, 1] und Polsterung 'SAME'

aber h.get_shape() gibt mir (?,?,?, 128), die ich erwartet hatte (?, 14, 14, 64).

Können Sie mir helfen zu erkennen, wo der Fehler liegt?

    print(x.get_shape()) 
        print(self.w.get_shape()) 
        output_shape = tf.pack([tf.shape(x)[0], 
              self.output_size[0], 
              self.output_size[1], 
              self.output_size[2]]) 
        h = self.activation(
         tf.nn.bias_add(
          tf.nn.conv2d_transpose(
           x, self.w, 
           output_shape=output_shape, 
           strides=self.stride, 
           padding=self.padding 
          ), self.b 
         ) 
        ) 
        print(h.get_shape()) 

Antwort

0

Gewichtsvariable für Konvolution sollte die Form [height, width, input_channels, output_channels] haben. Versuchen Sie also, beim Erstellen von self.w zwei letzte Formparameter zu tauschen.

+0

Aber das ist für deconv. Soll ich die ursprüngliche Form der Gewichte beibehalten? – ATANG

+0

Soweit Sie wissen, versuchen Sie, x mit der Tiefe 128 in einen anderen Tensor mit der Tiefe 64 zu transformieren. Sie sollten also die Form von [3, 3, 128, 64] verwenden. –

Verwandte Themen