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。或者複製邊界的值等等。