回答

15

你可以找到caffe here的詳細文檔。

具體而言,"Scale"層的DOC reads

計算兩個輸入的斑點的產物,與後者的Blob的「廣播」,以匹配前的形狀的形狀。相當於拼貼後者Blob,然後計算元素產品。
第二個輸入可能會被忽略,在這種情況下,它會被學習爲圖層的參數。

看起來就像你的情況一樣(單個「底部」),這一層學習一個比例因子來乘以"res2b_branch2b"。此外,由於scale_param { bias_term: true }意味着該層不僅學習乘法縮放因子,而且學習常數項。因此,直傳計算:

res2b_branch2b <- res2b_branch2b * \alpha + \beta 

在訓練過程中的淨努力學習的\alpha\beta值。

+0

Shai,那麼相當於在res2b_branch2b之後放置一個過濾器大小爲1x1的卷積層。如果我們這樣做,那麼輸出將是y = W * x + b,它會學習W和b對嗎?那麼當我們不提供後者的底層時,它是否等同於縮放層? – Dharma

+0

@Dharma只有當'x'是1D時纔是等價的。不要混淆內積和標量乘法。 – Shai

+0

哦,好的。然後它只學習兩個參數α和β,而不是整個W矩陣。我對嗎? – Dharma

7

caffe.proto file中還有一些文檔,您可以搜索'ScaleParameter'。

感謝您的帖子堆:)縮放層正是我一直在尋找。如果有人想對於由一個標量(0.5)縮放,然後層的例子「增加了」 -2(和這些值不應該改變):

layer { 
    name: "scaleAndAdd" 
    type: "Scale" 
    bottom: "bot" 
    top: "scaled" 
    param { 
    lr_mult: 0 
    decay_mult: 0 
    } 
    param { 
    lr_mult: 0 
    decay_mult: 0 
    } 
    scale_param { 
    filler { 
     value: 0.5 } 
    bias_term: true 
    bias_filler { 
     value: -2 
    } 
    } 
} 

(也許,decay_mult的是不必要這裏雖然。但說不上看評論)比 其他:

  • lr_mult:0 - 關閉學習 「是參數」 - 我認爲 第一"param {"總是()是指重量,?第二個偏向(lr_mult不是ScaleLayer特有的)
  • 填充物:「填充參數」[see caffe.proto],告訴如何填充第二個斑點。默認值是一個常量「值:...」。
  • bias_filler:參數告訴如何填寫可選的偏置BLOB
  • bias_term:是否有偏差BLOB

所有的caffe.proto拍攝。而且:我只用兩個填充值= 1.2來測試上面的圖層。

+1

dasWesen。你已經提供了權重和偏差項。所以你把lr_mult = 0,這樣你就不需要學習它們,decay_mult = 0,所以你也不需要懲罰權重。 – Dharma

+0

@Dharma:等等,我已經在編輯中了,但是:我認爲decay_mult並不是必需的。至少這些額外的正則化術語不會改變(損失)梯度的方向。這是因爲這些術語是常數,因爲涉及的變量(=比例和偏差)不允許改變。 - 但decay_mult = 0可能會運行得更快。 – dasWesen

+0

無論如何,佛法好,你提到了decay_mult的作用。 – dasWesen