NetGraph
詳細とオプション
- NetGraphは,剰余の接続,連結,注意等の操作のためにニューラルネットワークの操作を複数の入力あるいは出力と繋ぐためによく使われる.
- NetGraph全体の入力あるいは出力のポートは,接続リストの中でNetPort["input"]…あるいは…NetPort["output"]を指定して作ることができる.
- グラフ内の連結の線形鎖は layer1layer2…layernとして指定できる.これは各 layeriを layeri+1に連結する.
- 第 n 層または"layer"という名前の層に入力ポートまたは出力ポートが複数ある場合は,NetPort[n,"port"]あるいはNetPort["layer","port"]を書いて曖昧さをなくすことができる.
- ある層にCatenateLayerやThreadingLayerのように複数の入力が可能なポートがある場合,{m1,m2,…}n で同時に複数の接続を行うことができる.これは …,m1n,…,m2n,…に等しい.入力 miは m1,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] n LinearLayer[n] {layer1,layer2,…} NetChain[{layer1,layer2,…}] - 次の訓練パラメータを含めることができる.
-
LearningRateMultipliers Automatic ネットの中の訓練可能な配列についての学習率乗数 - 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 に適用する際にオプションを使うように指定する.次は使用可能なオプションである.
-
BatchSize Automatic 入力リストについて一度に評価する入力数 NetEvaluationMode "Test" 評価を行う際にどのモードを使うか RandomSeeding Automatic 擬似乱数生成器がある場合はそれをどのようにシードするか TargetDevice "CPU" 評価を行うターゲットデバイス WorkingPrecision "Real32" ネットの評価に使う数値精度 - 次は,WorkingPrecisionの可能な設定である.
-
"Real32" 単精度実数を使う(32-bit) "Real64" 倍精度実数を使う(64-bit) "Mixed" 特定の操作に半精度実数を使う - WorkingPrecision"Mixed"はTargetDevice"GPU"についてのみサポーとされるが,この場合はデバイスによっては重大なパフォーマンスの向上が期待できる.
- NumericArrayが入力として与えられると,出力はNumericArrayになる.その場合,数値型はWorkingPrecisionから導かれる.
- NetEvaluationMode"Training"という設定のとき,DropoutLayer等の層は,通常評価のようにではなく訓練時のように動作する.
- NetGraphのStandardFormはグラフ内の層の連結度を与え,辺が表す配列の次元で辺に注釈を付ける.グラフ内の層あるいはポートをクリックすると層あるいはポートについてのより詳しい情報が表示される.
- Normal[NetGraph[…]]は,グラフの構築に使われる層のリストまたは連想を返す.EdgeList[NetGraph[…]]はグラフ中の連結リストを返す.
- NetGraph[…][[spec]]は,ネットから spec で指定された層を抽出する.
- NetGraph[…]ネットワークの変換は,NetReplacePart,NetReplace,NetRename,NetFlatten,NetDelete,NetTake等で行える.
- Options[NetGraph]は層を構築する際のデフォルトオプションのリストを与える.Options[NetGraph[…]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
- Information[NetGraph[…]]はネットワークについてのレポートを与える.
- Information[NetGraph[…],prop]はNetGraph[…]の特性 prop の値を与える.次は,使用可能な特性である.
-
"Arrays" ネットワークの各配列を与える連想 "ArraysByteCounts" 各配列のバイト数を与える連想 "ArraysCount" すべての層の配列総数 "ArraysDimensions" 各配列の次元を与える連想 "ArraysElementCounts" 各配列の要素数を与える連想 "ArraysLearningRateMultipliers" 各配列についてのデフォルトの学習率乗数の連想 "ArraysPositionList" NetExtract,NetReplacePart,LearningRateMultipliers等についての配列の位置指定 "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)
net = NetGraph[{LinearLayer[2], ElementwiseLayer[Ramp], ThreadingLayer[Plus]}, {1 -> 2, {NetPort["Input"], 2} -> 3}]inet = NetInitialize[net]inet[{-1, 1}]chain = NetChain[{1, Ramp, 2, LogisticSigmoid}]NetGraph[chain]層をNetGraphにネストさせる:
NetGraph[LinearLayer[]]スコープ (14)
構築 (6)
NetGraph[
{LinearLayer[2], ElementwiseLayer[Ramp], LinearLayer[4]}, {1 -> 2, 2 -> 3}]層の名前には省略できるものがあり,連続する辺の規則は変えることができる:
NetGraph[{2, Ramp, 4}, {1 -> 2 -> 3}]NetGraph[
{LinearLayer[2], ElementwiseLayer[Ramp], LinearLayer[4]}, {1 -> 2, 2 -> 3}] === NetGraph[{2, Ramp, 4}, {1 -> 2 -> 3}]NetGraph[{2, Ramp, Plus}, {1 -> 2, {NetPort["Input"], 2} -> 3}]NetGraph[{2, Ramp, Plus}, {NetPort["Input1"] -> 1 -> 2, {NetPort["Input2"], 2} -> 3}]NetGraph[{2, Ramp, Plus}, {1 -> 2, {NetPort["Input"], 2} -> 3 -> NetPort["Output2"], 1 -> NetPort["Output1"]}]NetGraph[<|"linear1" -> 2, "ramp" -> Ramp, "linear2" -> 2, "plus" -> Plus|>, {"linear1" -> "ramp" -> "linear2", {NetPort["Input"], "linear2"} -> "plus"}]既存のNetGraphまたはNetChainからネットグラフを構築する:
NetGraph[{
NetChain[{10, Ramp, 10, Ramp, 2}],
NetGraph[{CatenateLayer[InputPorts -> 2], 10, Ramp, 10}, {1 -> 2 -> 3 -> 4}]
}, {1 -> 2}]NetPortを使った特別な構築 (3)
出力がLongShortTermMemoryLayerの最終の内部状態であるネットを構築する:
net = NetInitialize@NetGraph[
{Ramp, LongShortTermMemoryLayer[2, "Input" -> {"Varying", 2}]},
{1 -> 2, NetPort[2, "CellState"] -> NetPort["FinalCellState"], NetPort[2, "Output"] -> None}]net[{{1., -1.}, {1., -1.}}]net = NetGraph[{CatenateLayer[InputPorts -> 2], 10, Ramp, 10}, {1 -> 2 -> 3 -> 4}]NetGraph[net, {NetPort[{2, "Output"}] -> NetPort["Foo"]}]包み込まれたNetChainの内側のポートに接続する:
net = NetGraph[{
NetChain[{10, Ramp, 10, Ramp, 2}],
10, Ramp}, {NetPort[{1, 3, "Output"}] -> 2 -> 3}]結果のNetGraphを平坦にする:
NetFlatten[net]評価 (3)
NetGraphを構築する:
net = NetInitialize@NetGraph[{10, Ramp, 10, Tanh, Times, Plus}, {1 -> 2 -> 3 -> 4, {2, 4} -> 5, {4, 5} -> 6}, "Input" -> 5]net[{-2, -1, 0, 1, 2}]ネットをNumericArrayに適用する:
net[NumericArray[{-2, -1, 0, 1, 2}, "Real32"]]net[NumericArray[{-2, -1, 0, 1, 2}, "Real32"], WorkingPrecision -> "Real64"]システムのデフォルトGPUがあればそれを使ってネットを適用する:
net[{-2, -1, 0, 1, 2}, TargetDevice -> "GPU"]net[<|"Input" -> NumericArray[{-2, -1, 0, 1, 2}, "Real32"], NetPortGradient["Output"] -> {1, 0, -1, 0, 1, -1, 0, 1, -1, 1}|>, NetPortGradient[All]]net = NetGraph[{Ramp, SoftmaxLayer[]}, {1 -> 2}, "Output" -> NetDecoder[{"Class", {a, b}}]]net[{0.2, 0.8}]net[{0.8, 0.2}]net[{0.8, 0.2}, "Probabilities"]net[{0.8, 0.2}, {"Probability", a}]net[{0.8, 0.2}, "Entropy"]net = NetGraph[{LinearLayer[2], SoftmaxLayer[], MeanSquaredLossLayer[]}, {1 -> 2 -> 3}, "Input" -> "Scalar"]net = NetInitialize[net];net[<|"Input" -> 1, "Target" -> {2, 3}|>]特性 (2)
net = NetInitialize@NetGraph[{2, Ramp, 2, Plus}, {1 -> 2 -> 3, {NetPort["Input"], 3} -> 4}]NetExtract[net, 3]Normal[net]net = NetInitialize@NetGraph[<|"linear1" -> 2, "ramp" -> Ramp, "linear2" -> 2, "plus" -> Plus|>, {"linear1" -> "ramp" -> "linear2", {NetPort["Input"], "linear2"} -> "plus"}]NetExtract[net, "linear2"]Information[net, "Arrays"]Normal[net]EdgeList[net]アプリケーション (1)
2つの異なる分類をするネットを作ってマルチタスク学習を実行する.まず,訓練データを入手する:
obj = ResourceObject["CIFAR-100"]訓練データは,画像とそれに対応する高レベルと低レベルのラベルからなっている:
trainingData = ResourceData[obj, "TrainingDataset"];
RandomSample[trainingData, 5]"Label"と"SubLabel"の両方の列から一意的なラベルを抽出する:
labels = Union@Normal@trainingData[All, "Label"]sublabels = Union@Normal@trainingData[All, "SubLabel"]500個の特徴のベクトルを生成する,ベースたたみ込みネットを作る:
convnet = NetChain[{
ConvolutionLayer[20, 5], Ramp, PoolingLayer[2, 2],
ConvolutionLayer[50, 5], Ramp, PoolingLayer[2, 2],
500, Ramp
}, "Input" -> NetEncoder[{"Image", {32, 32}}]]高レベルラベルと低レベルラベルを別々に分類するNetGraphを作る:
net = NetGraph[{convnet, 100, SoftmaxLayer[], 20, SoftmaxLayer[]}, {NetPort["Image"] -> 1 -> 2 -> 3 -> NetPort["SubLabel"], 2 -> 4 -> 5 -> NetPort["Label"]},
"Label" -> NetDecoder[{"Class", labels}], "SubLabel" -> NetDecoder[{"Class", sublabels}]]trained = NetTrain[net, trainingData, MaxTrainingRounds -> 10];trained[{[image], [image], [image], [image], [image], [image], [image], [image], [image], [image]}]trained[[image], NetPort["Label"] -> "Probabilities"]ランダムなサンプルから,ネットが"Label"について最大エントロピーと最小エントロピーを予測する画像を選択する:
images = RandomSample[Normal[trainingData][[All, "Image"]], 5000];
entropies = trained[images, NetPort["Label"] -> "Entropy"];Labeled[images[[Ordering[entropies, -10]]], "high entropy"]
Labeled[images[[Ordering[entropies, 10]]], "low entropy"]NetTakeを使って"SubLabel"の予測だけを計算する部分ネットを作る:
subnet = NetTake[trained, {NetPort["Image"], NetPort["SubLabel"]}]subnet[[image]]特性と関係 (4)
NetGraphの中でNetChainオブジェクトを層として使うことができる:
chain = NetChain[{Ramp, LogisticSigmoid}];
NetGraph[{chain, LinearLayer[3]}, {1 -> 2}]入出力ポートが各1つのNetGraphオブジェクトをNetChainオブジェクトの中で層として使うことができる:
net = NetGraph[{Ramp, LogisticSigmoid, CatenateLayer[]}, {1 -> 2, {1, 2} -> 3}];
NetChain[{ElementwiseLayer[Ramp], net}]NetGraphの構築に使われた層はNormalを使って取り出すことができる:
net = NetGraph[{1, Ramp, 2, Tanh}, {1 -> 2 -> 3 -> 4}]Normal[net]Information[graph,"SummaryGraphic"]を使ってグラフに内在する接続性を示すGraphics[…]式を得る:
net = NetGraph[{LinearLayer[2], Ramp, LinearLayer[3], SoftmaxLayer[], MeanSquaredLossLayer[]}, {1 -> 2 -> 3 -> 4 -> 5}, "Input" -> "Scalar"]Information[net, "SummaryGraphic"]考えられる問題 (1)
NetGraphで辺が定義される順序には意味がある.行列ベクトルのドット積を計算するNetGraphを作る:
edges = {NetPort["matrix"] -> 1, NetPort["vector"] -> 1}NetGraph[{DotLayer[]}, edges, "vector" -> {2}, "matrix" -> {3, 2}]辺が定義される順序を逆にすると,次元が互換ではないベクトルと行列の積が計算されるのでうまくいかない:
NetGraph[{DotLayer[]}, Reverse[edges], "vector" -> {2}, "matrix" -> {3, 2}]テクニカルノート
関連するガイド
-
▪
- コンピュータビジョン ▪
- ニューラルネットワークの構築と特性 ▪
- ニューラルネットワーク層 ▪
- ニューラルネットワーク ▪
- 機械学習 ▪
- ニューラルネットワークの操作 ▪
- 自然言語処理 ▪
- 顕微鏡検査のための画像計算 ▪
- 音声処理 ▪
- 音声解析
テキスト
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_2026_netgraph, author="Wolfram Research", title="{NetGraph}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/NetGraph.html}", note=[Accessed: 15-July-2026]}
BibLaTeX
@online{reference.wolfram_2026_netgraph, organization={Wolfram Research}, title={NetGraph}, year={2022}, url={https://reference.wolfram.com/language/ref/NetGraph.html}, note=[Accessed: 15-July-2026]}