"Function" (ネットエンコーダ)
"Function" (ネットエンコーダ)
NetEncoder[{"Function",f,{d1,d2,…,dn}}]
d1×d2×…×dnの出力テンソルを作り出すための入力を,カスタム関数 f を使って符号化するエンコーダを表す.
詳細
- NetEncoder[{"Function",…}]は,ニューラルネットワークのための前処理を定義するために使われることが多い.
- NetEncoder[…][input]はエンコーダを入力に適用し,出力を作る.
- NetEncoder[…][{input1,input2,…}]はエンコーダを入力のリストに適用し,出力のリストを作る.
- エンコーダへの入力 inputi はどのようなタイプでも,f[inputi]が d1×d2×…×dn の次元の配列を作り出すものであればよい.配列は,NumericArray式または数の多次元リストでよい.
- ネットワークの構築時に"port"->NetEncoder[…]と指定することで,エンコーダをネットワークの入力ポートに付加することができる.
- 以下のパラメータが使用可能である:
-
"Pattern" None 関数への入力に期待されるパターン "Batched" False 関数に入力のバッチを与えるかどうか SaveDefinitions True エンコーダの評価に関連した現行の定義を自動保存すべきかどうか Initialization None エンコーダが最初に適用された時に評価される式 ExcludedContexts Automatic シンボルの定義が再帰的に保存されないコンテキスト IncludedContexts All シンボルの定義が再帰的に保存されるコンテキスト - パラメータ"Pattern"patt は,エンコーダへの有効な入力がパターン patt と一致するよう指定する."Pattern" Noneは,チェックが行われないことを示す.
- パラメータ"Batched" Trueを使うと,関数は例題ごとに個別に適用されるのではなく,例題のバッチにまとめて一回適用される.
- デフォルトで,NetEncoder[{"Function",f,…}]は f の評価に必要なすべてのシンボルの定義を保存し,エンコーダを最初に評価するときにその定義を回復する.保存する定義の選択はSaveDefinitions,Initialization,ExcludedContexts,IncludedContextsの各オプションを使って変更できる.
パラメータ
例題
すべて開く すべて閉じる例 (1)
スコープ (2)
enc = NetEncoder[{"Function", AngleVector /* N, {2}}]enc[Range[0, Pi, Pi / 2]]enc = NetEncoder[{"Function", Function[Lookup[<|Less -> 1, Equal -> 2, Greater -> 3|>, #]], {"Varying", Restricted["Integer", 3]}}]enc[{{Greater, Less, Less}, {Equal, Greater}}]このエンコーダをEmbeddingLayerに対して使う:
net = NetInitialize[EmbeddingLayer[1, "Input" -> enc]]net[{{Greater, Less, Less}, {Equal, Greater}}]パラメータ (3)
"Pattern" (1)
"Batched" (1)
enc = NetEncoder[{"Function", Function[Echo[# + 1]], {}, "Pattern" -> _Real, "Batched" -> True}]enc[1.]enc[{1., 2., 3.}]enc = NetEncoder[{"Function", Function[Echo[# + 1]], {}, "Pattern" -> _Real, "Batched" -> False}]enc[{1., 2., 3.}]SaveDefinitions (1)
f[x_] := x * 2
g[x_] := f[x] + 1
enc = NetEncoder[{"Function", g, {}}]Clear[f, g]
DownValues /@ {f, g}enc[1]DownValues /@ {f, g}この動作はSaveDefinitionsFalseを使って無効にできる:
enc = NetEncoder[{"Function", g, {}, SaveDefinitions -> False}]enc[1]Clear[f, g]enc[1]DownValues /@ {f, g}考えられる問題 (1)
パラメータ"Pattern"Noneを使うと,入力が1つの例なのか,例のリストなのかが曖昧になる.結果として,例のリストが与えられた場合には,関数は余分に時間が使える:
enc = NetEncoder[{"Function", Function[Echo[# + 1]], {}, "Pattern" -> None, "Batched" -> True}]enc[1.]enc[{1., 2., 3.}]