2016-08-23 13 views
0

複数の出力層のアーキテクチャを持つニューラルネットワークを構築します。より具体的には、一連の畳み込みレイヤの上に並列プロシージャを構築するように設計されています。 1つのブランチは分類結果を計算することです(softmaxのような)。もう一つは回帰結果を得ることです。しかし、私はモデルを設計しているだけでなく、損失関数(基準)を選択しています。多出力層ニューラルネットワークのトーチ実装

I. convレイヤーの上にブランチレイヤー(nn.Sequential())のトーチコンテナnn.Parallel()またはnn.Concat()を使用する必要がありますか?データ形式以外の違いは何ですか?

II。出力データのために、分類損失関数と回帰損失関数は線形結合されます。決定された容器に関してnn.MultiCriterion()またはnn.ParallelCriterion()を選択するかどうかは疑問です。あるいは、新しい基準クラスをカスタマイズする必要があります。

III。似たような仕事をしたことがある人は、トーチがトレーニングのためのバックプロンプトを実装するために追加のカスタマイズが必要かどうかを教えてもらえますか?私はトーチコンテナのデータ構造の問題について懸念しています。 Parallel

答えて

1
  1. ConcatParallelの各入力は、最後の層の出力のスライスを取りながらConcat内の各モジュールは、入力として、最後の層の全体の出力を取得することで異なります。あなたの目的のためには、Parallelではなく、Concatが必要です。なぜなら、両方の損失関数が順次ネットワークの全出力を取る必要があるからです。

  2. MultiCriterionParallenCriterionのソースコードに基づいて、それらは事実上同じことをします。重要な違いは、MultiCriterionの場合、複数の損失関数を提供しますが、1つのターゲットのみであり、すべてがそのターゲットに対して計算されることです。あなたが分類と回帰タスクを持っているとすれば、私はあなたが異なったターゲットを持っていると仮定して、が必要です。がマルチターゲットモードを有効にします(引数がtrueParallelCriterionMultiCriterionと同じように見える場合)。次に、targetは個々の基準のターゲットの表になると予想されます。

  3. ConcatParallelCriterionを使用する場合、トーチは適切にグラデーションを計算できる必要があります。両方とも、個々のブロックの勾配を適切にマージするupdateGradInputを実装しています。

関連する問題