1. 程式人生 > >cnn學習之卷積或者池化後輸出的map的size計算

cnn學習之卷積或者池化後輸出的map的size計算

相信各位在學習cnn的時候,常常對於卷積或者池化後所得map的的大小具體是多少,不知道怎麼算。尤其涉及到邊界的時候。

首先需要了解對於一個輸入的input_height*input_widtht的影象,在卷積或者池化的時候,經常需要加padding,這是為了處理邊界問題時而採用的一種方式,於是原輸入就變成了下圖所示:


對於輸出的size計算 如下圖:

out_height=((input_height - filter_height + padding_top+padding_bottom)/stride_height  )+1

out_width=((input_width - filter_width + padding_left+padding_right)/stride_width )+1

只不過往往

out_height=out_width ,

input_height = input_width   

fillter_height=filter_width  padding_top=padding_bottom=padding_left=padding_right  

stride_width=stride_height罷了

此外對於當前主流的cnn框架

tensorflow中是如此計算的:

首先對於padding有兩個預設的選項same和valid ,如果是valid的話,則padding的四個值均為0,也就是沒有padding

對於same,計算方式如下圖,圖中out的值可以直接計算出來的原因是因為padding的值是一個根據輸入的定值的;大家把pad_along_height的等式轉化成,左邊是out_height,右邊是其他的形式。就一樣了。


其他的框架,比如caffe,應該都是自己設定padding的值大小。

至於padding出來的區域的值,一般填0。或者複製邊界的值等等。