相信各位在學習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。或者複製邊界的值等等。