[英]Caffe conv layer weights and dimensions
我偶然發現了這篇很好的文章 ,它直觀地解釋了如何運行。
現在試圖了解caffe conv層內部正在發生的事情:
輸入數據形狀為1 x 13 x 19 x 19,以及128個濾波器轉換層:
layers {
name: "conv1_7x7_128"
type: CONVOLUTION
blobs_lr: 1.
blobs_lr: 2.
bottom: "data"
top: "conv2"
convolution_param {
num_output: 128
kernel_size: 7
pad: 3
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
如果我理解正確,圖層輸出形狀是1 x 128 x 19 x 19。
在net->layers()[1]->blobs()
查看圖層的權重形狀:
layer 1: type Convolution 'conv1_7x7_128'
blob 0: 128 13 7 7
blob 1: 128
看起來blob 0具有所有的重量:每個平面一個7x7矩陣(13)每個濾波器(128)。
在1 x 13 x 19 x 19數據上使用blob 0進行卷積,如果我理解正確,我們最終得到128 x 13 x 19 x 19輸出(有填充,因此每個7x7矩陣為每個像素生成一個數字)
128 x 13 x 19 x 19如何變成圖層的1 x 128 x 19 x 19輸出?
blob 1中的128個權重是多少?
獎金問題:什么是blobs_lr
?
您正在引用舊版本的caffe原型文本格式。 調整為新格式將給你
layer { # layer and not layer*s*
name: "conv1_7x7_128"
type: "Convolution" # tyoe as string
param { lr_mult: 1. } # instead of blobs_lr
param { lr_mult: 2. } # instead of blobs_lr
bottom: "data"
top: "conv2"
convolution_param {
num_output: 128
kernel_size: 7
pad: 3
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
如果您輸入的數據shape
1 x 13 x 19 x 19,則表示您的batch_size
為1,您有13個通道,空間尺寸為19 x 19。
應用128個7 x 7過濾器(每個過濾器應用於所有13個輸入通道)意味着您有128個shape
13 x 7 x 7的過濾器(這是您第一層參數的shape
)。 使用單個輸出通道1 x 1 x 19 x 19應用每個濾波器結果,因為您有128個這樣的濾波器,最終得到1 x 128 x 19 x 19輸出。
第二層的參數是偏差項 - 每個濾波器結果的附加標量。 您可以通過添加來關閉偏差項
bias_term: false
到你層的convolution_param
。
您可以在此處閱讀有關卷積圖層的更多信息。
至於獎金問題,Eliethesaiyan在他的評論中已經很好地回答了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.