NetGraph

NetGraph[{layer1,layer2,},{m1n1,m2n2,}]

miの出力が層 niの入力として与えられるグラフで指定されたニューラルネットを指定する.

NetGraph["name1"layer1,"name2"layer2,,{"namem1""namen1",}]

明示的に名前が付けられた層があるネットを指定する.

NetGraph[layer]

層またはNetChainを同等の最小NetGraphに変換する.

詳細とオプション

  • NetGraphは,剰余の接続,連結,注意等の操作のためにニューラルネットワークの操作を複数の入力あるいは出力と繋ぐためによく使われる.
  • NetGraph全体の入力あるいは出力のポートは,接続リストの中でNetPort["input"]あるいはNetPort["output"]を指定して作ることができる.
  • グラフ内の連結の線形鎖は layer1layer2layernとして指定できる.これは各 layerilayeri+1に連結する.
  • n 層または"layer"という名前の層に入力ポートまたは出力ポートが複数ある場合は,NetPort[n,"port"]あるいはNetPort["layer","port"]を書いて曖昧さをなくすことができる.
  • ある層にCatenateLayerThreadingLayerのように複数の入力が可能なポートがある場合,{m1,m2,}n で同時に複数の接続を行うことができる.これは ,m1n,,m2n,に等しい.入力 mim1,m2,の順で常に n に渡される.
  • 任意の層の1つまたは複数の入力ポートあるいは出力ポートが連結されないままにされた場合,これらはNetGraph全体のポートになる.
  • 層の複数の出力ポートが連結されずに残され,"Output"という同じを共有している場合,これらは,名前が"Output1""Output2"等の,NetGraph全体の別々のポートになる.
  • NetPort[layer,"port"]Noneを書いていくつかの出力ポートをミュートのままにして置くことができる.
  • ポートの配列の形,NetEncoderあるいはNetDecoderの指定には,"port"shape の形式のオプションが使える,shape は次でよい.
  • "Real"単一の実数
    "Integer"単一の整数
    Restricted["Integer",n]1から n までの整数
    Restricted["Integer",{m,n}]m から n までの整数
    n長さ n のベクトル
    {n1,n2,}次元 n1×n2×の配列
    "Varying"可変長ベクトル
    {"Varying",n2,n3,}最初の次元が可変長で残りの次元が n2×n3×の配列
    NetEncoder[]エンコーダ(入力のための)
    NetEncoder[{,"Dimensions"{n1,}}]次元 n1×の配列にマップされたエンコーダ
    NetDecoder[]デコーダ(出力のための)
    NetDecoder[{,"InputDepth"n}}]階数 n の配列に適用されたデコーダ
    FeatureExtractorFunction[]特徴抽出器関数
  • NetGraphは,個別の層を与える場合に次の特別層指定をサポートする.
  • Ramp,LogisticSigmoid,ElementwiseLayer[f]
    Plus,Times,Divide,ThreadingLayer[f]
    nLinearLayer[n]
    {layer1,layer2,}NetChain[{layer1,layer2,}]
  • 次の訓練パラメータを含めることができる.
  • LearningRateMultipliersAutomaticネットの中の訓練可能な配列についての学習率乗数
  • NetGraph[][data]は,単一の入力ポートがあるネットについてはネットを data に適用した結果を与える.
  • NetGraph[][<|port1data1,|>]は,複数の入力ポートがあるネットについては各ポートのデータを与える.
  • NetGraph[][data]は,単一の出力ポートがあるネットについてはそのポートの出力を与える.特性 prop があるNetDecoderが出力ポートに接続されている場合,NetGraph[][data,prop]はその特性を計算する.
  • NetGraph[][data,"Properties"]を使って使用可能な特性のリストが得られる.
  • NetGraph[][data]は,複数の出力ポートがあるネットについてはすべてのポートの出力の連想を与える.NetGraph[][data,"oport"]"oport"という名前の出力ポートの出力を与える.NetGraph[][data,NetPort["oport"]prop]は特性 prop を持つNetDecoderがこの出力に接続されている場合はそのポートの特性を計算する.
  • NetGraph[][data,NetPort["oport"]"Properties"]を使って指定されたポートについて使用可能な特性のリストが得られる.
  • NetGraph[][data,NetPortGradient["port"]]は入力ポート"port"に対する出力の勾配を与える.
  • NetGraph[][data,NetPortGradient[{layer1,,"array"}]]はネストした層の配列に対する出力の勾配を与える.
  • NetGraph[][data,NetPortGradient[All]]はすべての勾配を含む連想を与える.
  • NetGraph[][data,{spec1,spec2,}]はすべての指定に対する出力の連想を与える.各指定 speciは,NetPort設定,NetDecoder特性への参照,あるいはNetPortGradientでよい.
  • NetGraph[][data,,opts]は,ネットを data に適用する際にオプションを使うように指定する.次は使用可能なオプションである.
  • BatchSizeAutomatic入力リストについて一度に評価する入力数
    NetEvaluationMode"Test"評価を行う際にどのモードを使うか
    RandomSeedingAutomatic擬似乱数生成器がある場合はそれをどのようにシードするか
    TargetDevice"CPU"評価を行うターゲットデバイス
    WorkingPrecision"Real32"ネットの評価に使う数値精度
  • 次は,WorkingPrecisionの可能な設定である.
  • "Real32"単精度実数を使う(32-bit)
    "Real64"倍精度実数を使う(64-bit)
    "Mixed"特定の操作に半精度実数を使う
  • WorkingPrecision"Mixed"TargetDevice"GPU"についてのみサポーとされるが,この場合はデバイスによっては重大なパフォーマンスの向上が期待できる.
  • NumericArrayが入力として与えられると,出力はNumericArrayになる.その場合,数値型はWorkingPrecisionから導かれる.
  • NetEvaluationMode"Training"という設定のとき,DropoutLayer等の層は,通常評価のようにではなく訓練時のように動作する.
  • NetGraphStandardFormはグラフ内の層の連結度を与え,辺が表す配列の次元で辺に注釈を付ける.グラフ内の層あるいはポートをクリックすると層あるいはポートについてのより詳しい情報が表示される.
  • Normal[NetGraph[]]は,グラフの構築に使われる層のリストまたは連想を返す.EdgeList[NetGraph[]]はグラフ中の連結リストを返す.
  • NetGraph[][[spec]]は,ネットから spec で指定された層を抽出する.
  • NetGraph[]ネットワークの変換は,NetReplacePartNetReplaceNetRenameNetFlattenNetDeleteNetTake等で行える.
  • Options[NetGraph]は層を構築する際のデフォルトオプションのリストを与える.Options[NetGraph[]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
  • Information[NetGraph[]]はネットワークについてのレポートを与える.
  • Information[NetGraph[],prop]NetGraph[]の特性 prop の値を与える.次は,使用可能な特性である.
  • "Arrays"ネットワークの各配列を与える連想
    "ArraysByteCounts"各配列のバイト数を与える連想
    "ArraysCount"すべての層の配列総数
    "ArraysDimensions"各配列の次元を与える連想
    "ArraysElementCounts"各配列の要素数を与える連想
    "ArraysLearningRateMultipliers"各配列についてのデフォルトの学習率乗数の連想
    "ArraysPositionList"NetExtractNetReplacePartLearningRateMultipliers等についての配列の位置指定
    "ArraysSizes"各配列の大きさを与える連想
    "ArraysTotalByteCount"すべての層のすべての配列のバイト総数
    "ArraysTotalElementCount"すべての配列の要素総数
    "ArraysTotalSize"すべての層のすべての配列の合計サイズ
    "FullSummaryGraphic"任意の深さのすべての層の連結度を表すグラフィックス
    "InputForm"ネットを再構築する式
    "InputPortNames"入力ポート名のリスト
    "InputPorts"入力ポートの形状の連想
    "Layers"ネットワーク中の各層を与える連想
    "LayersCount"層の総数
    "LayersGraph"層の連結度を表すグラフ
    "LayersList"すべての層のリスト
    "LayerTypeCounts"ネットワーク中に各タイプの層が何回出現するか
    "MXNetNodeGraph"もとになる"MXNet"操作の生のグラフ
    "MXNetNodeGraphPlot""MXNet"操作の注釈付きグラフ
    "OutputPortNames"出力ポート名のリスト
    "OutputPorts"出力ポートの形状の連想
    "Properties"使用可能な特性
    "RecurrentStatesCount"ネット中の再帰状態数
    "RecurrentStatesPositionList"NetStateObjectについての再帰状態の位置指定
    "SharedArraysCount"共有された配列の総数
    "SummaryGraphic"層の連結度を表すグラフィックス
  • 特性"ArrayByteCount""ArraysTotalByteCount"はすべての配列をそれらがすでに初期化されたかのように扱う.

例題

すべて開くすべて閉じる

  (3)

剰余ネットを作る:

ネット中のすべての配列を初期化する:

このネットを入力に適用する:

NetChainNetGraphに変換する:

層をNetGraphにネストさせる:

スコープ  (14)

構築  (6)

線形鎖からなるネットを構築する:

層の名前には省略できるものがあり,連続する辺の規則は変えることができる:

最終的な式は同じである:

2つの入力が必要な操作でネットグラフを構築する:

複数の入力でネットグラフを構築する:

複数の出力でネットグラフを構築する:

明示的に名付けられた層でネットグラフを構築する:

既存のNetGraphまたはNetChainからネットグラフを構築する:

NetPortを使った特別な構築  (3)

出力がLongShortTermMemoryLayerの最終の内部状態であるネットを構築する:

このネットを入力に適用する:

既存グラフの接続性を変更する:

包み込まれたNetChainの内側のポートに接続する:

結果のNetGraphを平坦にする:

評価  (3)

NetGraphを構築する:

ネットを入力に適用する:

ネットをNumericArrayに適用する:

倍精度実数を使ってネットを適用する:

システムのデフォルトGPUがあればそれを使ってネットを適用する:

ネットの一次導関数を計算する:

クラスデコーダでネットを構築する:

ネットを評価する:

第2引数を指定してデコーダの特性を取り出す:

明示的に損失を計算するネットを構築する:

ネットを初期化して入力について評価する:

特性  (2)

ネットを構築する:

位置によって与えられた層を抽出する:

層のリストを得る:

明示的に名付けられた層でネットを構築する:

指定の層を名前を使って抽出する:

ネット内のすべての配列を得る:

連想中のすべての層を得る:

辺のリストを得る:

アプリケーション  (1)

2つの異なる分類をするネットを作ってマルチタスク学習を実行する.まず,訓練データを入手する:

訓練データは,画像とそれに対応する高レベルと低レベルのラベルからなっている:

"Label"と"SubLabel"の両方の列から一意的なラベルを抽出する:

500個の特徴のベクトルを生成する,ベースたたみ込みネットを作る:

高レベルラベルと低レベルラベルを別々に分類するNetGraphを作る:

ネットワークを訓練する:

訓練されたネットワークを例の画像について評価する:

単一の画像の確率を求める:

ランダムなサンプルから,ネットが"Label"について最大エントロピーと最小エントロピーを予測する画像を選択する:

NetTakeを使って"SubLabel"の予測だけを計算する部分ネットを作る:

単一の画像について予測する:

特性と関係  (4)

NetGraphの中でNetChainオブジェクトを層として使うことができる:

入出力ポートが各1つのNetGraphオブジェクトをNetChainオブジェクトの中で層として使うことができる:

NetGraphの構築に使われた層はNormalを使って取り出すことができる:

Information[graph,"SummaryGraphic"]を使ってグラフに内在する接続性を示すGraphics[]式を得る:

考えられる問題  (1)

NetGraphで辺が定義される順序には意味がある.行列ベクトルのドット積を計算するNetGraphを作る:

辺が定義される順序を逆にすると,次元が互換ではないベクトルと行列の積が計算されるのでうまくいかない:

Wolfram Research (2016), NetGraph, Wolfram言語関数, https://reference.wolfram.com/language/ref/NetGraph.html (2022年に更新).

テキスト

Wolfram Research (2016), NetGraph, Wolfram言語関数, https://reference.wolfram.com/language/ref/NetGraph.html (2022年に更新).

CMS

Wolfram Language. 2016. "NetGraph." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/ref/NetGraph.html.

APA

Wolfram Language. (2016). NetGraph. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/NetGraph.html

BibTeX

@misc{reference.wolfram_2024_netgraph, author="Wolfram Research", title="{NetGraph}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/NetGraph.html}", note=[Accessed: 17-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_netgraph, organization={Wolfram Research}, title={NetGraph}, year={2022}, url={https://reference.wolfram.com/language/ref/NetGraph.html}, note=[Accessed: 17-November-2024 ]}