2016-08-23 41 views
0

我打算建立一個具有多個輸出層結構的神經網絡。更具體地說,它被設計用來在一系列卷積層之上構建並行程序。一個分支是計算分類結果(softmax-like);另一個是獲得迴歸結果。然而,我堅持設計模型以及選擇損失函數(標準)。火炬實現多輸出層神經網絡

I.我應該使用火炬容器nn.Parallel()nn.Concat()作爲位於頂層的分支圖層(nn.Sequential())嗎?除數據格式外,什麼是差異。

二,由於輸出數據,分類損失函數和迴歸損失函數應線性組合。我想知道是否nn.MultiCriterion()nn.ParallelCriterion()被確定的容器。或者我必須自定義一個新的標準類。

三,任何做過類似工作的人都可以告訴我,火炬是否需要額外的定製來實施反向訓練。我擔心火炬容器的數據結構問題。

回答

1
  1. Concat VS Parallel不同之處在於在Concat每個模塊獲取最後一層作爲輸入的整個輸出,而Parallel每個輸入需要的最後一層的輸出的一個切片。出於您的目的,您需要Concat,而不是Parallel,因爲這兩個丟失功能需要將您的順序網絡的整個輸出。

  2. 根據MultiCriterionParallenCriterion的源代碼,他們做了幾乎相同的事情。重要的區別是,在MultiCriterion的情況下,您提供了多個損失函數,但只有一個目標,它們都是針對該目標進行計算的。假設你有一個分類和一個迴歸任務,我假設你有不同的目標,所以你需要ParallelCriterion(false),其中false啓用多目標模式(如果參數是trueParallelCriterion似乎表現爲與MultiCriterion相同)。然後target預計成爲個別標準的目標表。

  3. 如果您使用ConcatParallelCriterion,割炬應該能夠爲您正確計算梯度。這兩者都實現updateGradInput,它正確地合併各個塊的梯度。