2016-10-29 114 views
0

我有以下代碼片段來做deconv。Tensorflow conv2d_transpose形狀

x.get_shape()給我(?,14,14,128)

self.w.get_shape()給我(3,3,64,128)

output_shape應該是( ?,14,14,64)

濾波器尺寸爲[3,3],步幅爲[1,1,1,1]和填充是 'SAME'

但h.get_shape()讓我(?,?,?,128),我期待看到(?,14,14,64)。

你能幫我找出錯誤在哪裏嗎?

    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()) 

回答

0

用於卷積的權重變量應該具有[height, width, input_channels, output_channels]的形狀。因此,只需在創建self.w時嘗試交換形狀的最後兩個參數即可。

+0

但是這是爲deconv。我應該保持重量的原始形狀嗎? – ATANG

+0

據瞭解,你試圖將深度128的x變換爲深度64的另一個張量。所以,你應該使用[3,3,128,64]的形狀。 –