-2

この関数の「ih」と「ho」は何ですか。ソフトマックス起動機能です文字列チェックの理由がわかりません。

public double sim(double x, string layer)
    {
      // Determine max
      double max = double.MinValue;
      if (layer == "ih")
        max = (ihSum0 > ihSum1) ? ihSum0 : ihSum1;
      else if (layer == "ho")
        max = (hoSum0 > hoSum1) ? hoSum0 : hoSum1;

      // Compute scale
      double scale = 0.0;
      if (layer == "ih")
        scale = Math.Exp(ihSum0 - max) + Math.Exp(ihSum1 - max);
      else if (layer == "ho")
        scale = Math.Exp(hoSum0 - max ) + Math.Exp(hoSum1 - max);

      return Math.Exp(x - max) / scale;
    }
4

1 に答える 1

0

機能は理解するのにそれほど難しくありません。関数がニューラル ネットワーク活性化関数の動作をどのように実装するかを確認するために、少し時間がかかる場合があります。

ニューラル ネットワークでは、一連の入力を受け取り、(入力の中で) 最大値に基づいて関数をトリガーするものを決定するアクティベーション関数を使用するのが一般的です。

あなたの場合も同様です。

コードネーム「ih」と「ho」の2つの入力セット(各「セット」は「レイヤー」と呼ばれるため、2つのレイヤーがあります)があるようです。各セットにはさらに と と呼ばれる 2 つの要素がSum0ありSum1、したがって 4 つの入力の組み合わせを作成します: 1.ihSum0ihSum1(ihレイヤーの場合) 2.hoSum0hoSum1(hoレイヤーの場合)

ihho、およびがあなたの文脈で意味するものは何でもlayer、あなたはよりよく理解するでしょう. maxただし、この関数は、2 つの変数 (および)を決定するために、どの入力セット (または「レイヤー」) を使用するか (つまり、「ih」または「ho」) をチェックするだけですscale

if (layer == "ih")
    max = (ihSum0 > ihSum1) ? ihSum0 : ihSum1;
else if (layer == "ho")
    max = (hoSum0 > hoSum1) ? hoSum0 : hoSum1;

これは最終的に (とともにx)、関数の最終的な出力を決定するために使用されます。

return Math.Exp(x - max) / scale;
于 2016-01-02T06:18:09.843 に答える