簡體   English   中英

Caffe中帶有重量的自動編碼器

[英]Auto-encoders with tied weights in Caffe

根據我的理解,通常自動編碼器在編碼和解碼網絡中使用綁定權重嗎?

我看了一下Caffe的自動編碼器示例 ,但我沒看到權重是如何綁定的。 我注意到編碼和解碼網絡共享相同的blob,但是如何保證權重正確更新?

如何在Caffe中實現捆綁重量自動編碼器?

雖然在自動編碼器中有使用綁定權重的歷史,但現在很少使用(據我所知),我相信這就是為什么這個Caffe示例不使用綁定權重。

盡管如此,Caffe 確實支持具有綁定權重的自動編碼器,並且可以使用兩個功能:層之間的參數共享和完全連接層的轉置標志 (Caffe中的InnerProduct)。 更具體地說,如果Caffe的名稱相同,則可以在Caffe中共享兩個參數,這些參數可以在param字段下指定,如下所示:

layer {
  name: "encode1"
  type: "InnerProduct"
  bottom: "data"
  top: "encode1"
  param {
    name: "encode1_matrix"
    lr_mult: 1
    decay_mult: 1
  }
  param {
    name: "encode1_bias"
    lr_mult: 1
    decay_mult: 0
  }
  inner_product_param {
    num_output: 128
    weight_filler {
      type: "gaussian"
      std: 1
      sparse: 15
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

如果另一個完全連接的層(具有匹配的維度)使用名稱“encode1_matrix”和“encode1_bias”,則這些參數將始終相同,並且Caffe將負責聚合漸變並正確更新參數。 第二部分是使用完全連接層的轉置標志,以便在輸入乘法之前轉置共享矩陣。 因此,擴展上面的例子,如果我們想要一個與“encode1_matrix”具有相同權重矩陣的完全連接層作為解碼過程的一部分,那么我們將如下定義它:

layer {
  name: "decode1"
  type: "InnerProduct"
  bottom: "encode1"
  top: "decode1"
  param {
    name: "encode1_matrix"
    lr_mult: 1
    decay_mult: 1
  }
  param {
    name: "decode1_bias"
    lr_mult: 1
    decay_mult: 0
  }
  inner_product_param {
    num_output: 784
    transpose: true
    weight_filler {
      type: "gaussian"
      std: 1
      sparse: 15
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

請注意,偏差參數不是共享的(不能由於不同的輸出維度),而矩陣是共享的,解碼器層使用轉置標志來完成綁定的自動編碼器架構。

有關使用Caffe的綁定自動編碼器的完整工作示例,請參見此處: https//gist.github.com/orsharir/beb479d9ad5d8e389800c47c9ec42840

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM