複数の入力配列を取り,関数 f を対応する配列要素に適用する,ネット層を表す.
ThreadingLayer[f,bspec]
配列の形状をブロードキャスト指定 bspec に従って一致させる.
ThreadingLayer
複数の入力配列を取り,関数 f を対応する配列要素に適用する,ネット層を表す.
ThreadingLayer[f,bspec]
配列の形状をブロードキャスト指定 bspec に従って一致させる.
詳細とオプション
- ThreadingLayerはNetGraphの中で使われることが多い.
- ThreadingLayer[f]の関数 f は,Plus,Subtract,Times,Divide,Power,Surd,Min,Max,Clip,Mod,ArcTan,Erfのいずれでもよい.
- 一般に,f は,2引数に適用された場合にPlus,Subtract等と,数,ElementwiseLayerでサポートされるすべての関数の任意の組合せ,およびIf,And,Or,Which,Piecewise,Equal,Greater,GreaterEqual,Less,LessEqual,Unequalを使った論理操作を返す任意のオブジェクトでよい.
- 関数 f もまた,"name"[input]の形式の式を含むことができる.name はElementwiseLayerが取る名前付き関数("ELU","SELU","SoftSign"等)の一つである.
- ThreadingLayer[f,bspec]では,より小さい配列は,より大きい配列次元と一致するように,f を適用する前に暗黙裡に複製される.bspec には次の設定が使用できる.
-
None ブロードキャストなし Automatic サイズ1の次元に一致させる(デフォルト) n 必要なら正しいサイズの次元をレベル n に挿入する -n 末尾からの数 {spec1,spec2,…} それぞれの入力配列に特定のブロードキャスト設定を使う - オプションInputPortsを使って入力ポートの数,名前,形状が指定できる.InputPortsが指定されていない場合は,ポートの数と形状はNetChainあるいはNetGraphの接続性から推測される.
- ThreadingLayerは,NetGraph等で使うために,入力ポートの他に次のポートを開放する.
-
"Output" 配列 - ThreadingLayerはNetGraph内で,{src1,src2,…}threadlayer の形の単一のエッジを使って接続することができる.threadlayer はThreadingLayerの名前または指標である.独立した複数のエッジが src1threadlayer,src2threadlayer,…,srcnthreadlayer のように対応する順で与えられることもある.
- 入力ポートに明示的に名前が与えられていない場合は,ThreadingLayer[f,…]が"Input1","Input2"等の名前の入力ポートを開放する.
- ThreadingLayer[Function[… #Name1 … #Name2 …], …]は,"Name1","Name2"等という名前の入力ポートを開放する.
- ThreadingLayer[f,None]は全入力配列を強制的に同じ形状にする.出力もこの形になる.ThreadingLayer[f,Automatic]は全入力配列を同じ階数にする.各形状は同じであるか1に等しくなければならない.ThreadingLayer[Plus,-1]は,最深レベルの次元を挿入することで,Plusのような入力を自動的にブロードキャストする.
- ThreadingLayer[…][{in1,in2,…}]は,層を適用して出力を明示的に計算する.これは,事実上,f[in1,in2,…]で与えられる.
- NumericArrayが入力として与えられると,出力はNumericArrayになる.
- Options[ThreadingLayer]は層を構築する際のデフォルトオプションのリストを与える.Options[ThreadingLayer[…]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
- Information[ThreadingLayer[…]]は層についてのレポートを与える.
- Information[ThreadingLayer[…],prop]はThreadingLayer[…]の特性 prop の値を与える.使用可能な特性はNetGraphと同じである.
例題
すべて開く すべて閉じる例 (2)
Timesを縫い込まれる関数として使ってThreadingLayerを作る:
times = ThreadingLayer[Times]times[{{4, 2}, {3, 0}}]times[<|"Input1" -> {4, 2}, "Input2" -> {3, 0}|>]NetGraph中のThreadingLayerを使う:
net = NetGraph[{LogisticSigmoid, ThreadingLayer[#1 * #2 + (1 - #1) * #3&]}, {{NetPort["Weight"] -> 1, NetPort["Input1"], NetPort["Input2"]} -> 2}]net[<|"Weight" -> {-100, 100, 0}, "Input1" -> {0, 2, 4}, "Input2" -> {1, 3, 6}|>]スコープ (5)
特定の数の入力を取るThreadingLayerを作る:
plus = ThreadingLayer[Plus, InputPorts -> 2]layer = ThreadingLayer[#1 * #2 + (1 - #1) * #3&, InputPorts -> {"Weight", "Value1", "Value2"}]layer = ThreadingLayer[#1 * #2 + (1 - #1) * #3&, InputPorts -> {"Weight" -> {2}, "Value1" -> {2}, "Value2" -> {2}}]入力ポートの名前はThreadingLayerの関数内で直接指定することもできる:
ThreadingLayer[#Weight * #Value1 + (1 - #Weight) * #Value2&]最初の次元の最小の配列をブロードキャストすることで次元が異なる配列の合計を求めるThreadingLayerを作る:
plus = ThreadingLayer[Plus, 1, InputPorts -> {{"Varying", 2}, 2}]plus[{(| | |
| - | - |
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |), (| |
| -- |
| 10 |
| 20 |)}]//MatrixFormアプリケーション (1)
ThreadingLayerを使ってヒンジ損失を定義する:
HingeLossLayer[margin_] := NetGraph[{ThreadingLayer[Ramp[Abs[#2 - #1] - margin]&]}, {{NetPort["Input"], NetPort["Target"]} -> 1}, "Input" -> "Real"]hinge = HingeLossLayer[2]hinge[<|"Input" -> 3, "Target" -> 2|>]hinge[<|"Input" -> 5, "Target" -> 2|>]Plot[hinge[<|"Input" -> x, "Target" -> 2|>], {x, -4, 8}]data = {1 -> 1, 2 -> 2, 3 -> 3, 4 -> 9, 5 -> 5};
trained = NetTrain[LinearLayer[], data, LossFunction -> hinge, MaxTrainingRounds -> 1000]dataPlot = ListPlot[List@@@data, PlotStyle -> {Red, PointSize[Medium]}];
Show[dataPlot, Plot[trained[x], {x, 0, 5}]]ヒンジ損失,平均絶対値および平均二乗誤差を使って得られた解を比較する:
{net1, net2, net3} = NetTrain[LinearLayer[], data, LossFunction -> #1, MaxTrainingRounds -> 1000]& /@ {MeanSquaredLossLayer[], MeanAbsoluteLossLayer[], HingeLossLayer[2]};Show[
Plot[{Legended[net1[x], "squared"], Legended[net2[x], "absolute"], Legended[net3[x], "hinge"]}, {x, 0, 5}, PlotRange -> All],
dataPlot]考えられる問題 (3)
ThreadingLayerは記号入力を取らない:
ThreadingLayer[Times][{x, y}]f の選び方によっては,入力が領域外になってしまうためにエラーになる:
ThreadingLayer[Divide][{{1, 2}, {3, 0}}]ThreadingLayer[EuclideanDistance[#1, #2]&]テクニカルノート
関連するガイド
テキスト
Wolfram Research (2017), ThreadingLayer, Wolfram言語関数, https://reference.wolfram.com/language/ref/ThreadingLayer.html (2021年に更新).
CMS
Wolfram Language. 2017. "ThreadingLayer." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/ThreadingLayer.html.
APA
Wolfram Language. (2017). ThreadingLayer. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ThreadingLayer.html
BibTeX
@misc{reference.wolfram_2026_threadinglayer, author="Wolfram Research", title="{ThreadingLayer}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/ThreadingLayer.html}", note=[Accessed: 27-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_threadinglayer, organization={Wolfram Research}, title={ThreadingLayer}, year={2021}, url={https://reference.wolfram.com/language/ref/ThreadingLayer.html}, note=[Accessed: 27-June-2026]}