TrainingUpdateSchedule
NetTrainのオプションで,最適化の過程の各ステップでネットワークのどの配列が更新可能かを指定する.
詳細
- デフォルト値のTrainingUpdateScheduleAutomaticでは,最適化の過程の任意のステップですべての配列が更新される.
- TrainingUpdateSchedule{group1,group2,…,groupn}は,各最適化ステップでどの配列を更新するかを指定する.このスケジュールは訓練の最後まで繰り返される.
- TrainingUpdateSchedule{group1,group2,…,groupn}の各 groupiは次の形式でよい.
-
"layer" 名前付きの層または下位ネットワークのすべての配列 n 第 n 層のすべての配列 m;;n 第 m 層から第 n 層までのすべての配列 {layer,"array"} 配列または下位ネットワークの特定の配列 {part1,part2,…} ネストした層または下位ネットワークの配列 spec1|spec2|… 指定された配列のいずれか _ ネットワーク中の全配列 specs 連続する s ステップで同じ指定を繰り返す - TrainingUpdateScheduleがネットの一部を参照するために使う階層的指定{part1,part2,…} は,NetExtractやNetReplacePartが使うものと同じである.
- 部分ネット(例:ネストしたNetChainまたはNetGraph)の指定は,部分ネット内のすべての層と配列に適用される.
- TrainingUpdateScheduleで指定されていないパラメータの任意のグループは,訓練中一定に保たれる.
例題
すべて開く すべて閉じる例 (1)
弁別装置と生成器の更新を交互に行うことでNetGANOperatorを訓練する:
gan = NetGANOperator[{LinearLayer[{}], LinearLayer[{}]}, "Latent" -> "Real"]NetTrain[gan, <|"Sample" -> {-1, 0, 1}, "Latent" -> {-0.1, 0, 0.1}|>, TrainingUpdateSchedule -> {"Generator", "Discriminator"}]スコープ (2)
net = NetInitialize@NetChain[{LinearLayer[{}], Tanh, LinearLayer[]}, "Input" -> "Real", "Output" -> "Real"]第1層と第3層を交互に更新することでこのネットを訓練し,バッチの各最適化の反復の後でネット配列を収集する:
arrays = {Information[net, "Arrays"]};NetTrain[net, {-1 -> -0.4, -.5 -> 0, .5 -> 2, 1 -> 2.4}, TrainingUpdateSchedule -> {1, 3}, TrainingProgressFunction -> {Function[AppendTo[arrays, Information[#Net, "Arrays"]]], "Interval" -> Quantity[1, "Batches"]}, LearningRate -> 0.1, MaxTrainingRounds -> 10]反復による最初の配列値の進化を示し,配列が交互に更新されていることをチェックする:
ListStepPlot[KeyMap[StringRiffle, Map[First @* Flatten, Transpose[arrays, AllowedHeads -> All], {2}]]]名前付きの層があるNetGraphを作成して初期化する:
net = NetInitialize@NetGraph[<|"layer1" -> LinearLayer[{}], "tanh" -> Tanh, "layer2" -> LinearLayer[{}], "loss" -> MeanAbsoluteLossLayer[]|>, {"layer1" -> "tanh" -> "layer2" -> "loss"}, "Input" -> "Real"]NetGraphの下位部分を他より10倍以上更新することでこのネットを訓練する:
arrays = {Information[net, "Arrays"]};NetTrain[net, {-1 -> -0.4, -.5 -> 0, .5 -> 2, 1 -> 2.4}, TrainingUpdateSchedule -> {"layer1" -> 10, "layer2"}, TrainingProgressFunction -> {Function[AppendTo[arrays, Information[#Net, "Arrays"]]], "Interval" -> Quantity[1, "Batches"]}, LearningRate -> 0.8, MaxTrainingRounds -> 30]ListStepPlot[KeyMap[StringRiffle, Map[First @* Flatten, Transpose[arrays, AllowedHeads -> All], {2}]]]配列を1つずつ別々に更新することで同じNetGraphを訓練する:
arrays = {Information[net, "Arrays"]};NetTrain[net, {-1 -> -0.4, -.5 -> 0, .5 -> 2, 1 -> 2.4}, TrainingUpdateSchedule -> {{"layer1", "Biases"}, {"layer1", "Weights"}, {"layer2", "Biases"}, {"layer2", "Weights"}}, TrainingProgressFunction -> {Function[AppendTo[arrays, Information[#Net, "Arrays"]]], "Interval" -> Quantity[1, "Batches"]}, LearningRate -> 0.8, MaxTrainingRounds -> 20]ListStepPlot[KeyMap[StringRiffle, Map[First @* Flatten, Transpose[arrays, AllowedHeads -> All], {2}]]]考えられる問題 (1)
ネットワーク内の数ヶ所に共有配列があると,一意的な訓練更新スケジュールだけが共有配列のすべての出現に対して適用される.
sharedlayer = NetInsertSharedArrays[LinearLayer[{}, "Input" -> "Real"]];
net = NetInitialize@NetChain[{sharedlayer, Tanh, sharedlayer}]第1層だけを更新するように指定し各更新後に第3層の重みの値を集めるTrainingUpdateScheduleで訓練する:
arrays = {};NetTrain[net, {1 -> 0, 0 -> 1}, TrainingUpdateSchedule -> {1}, TrainingProgressFunction -> {Function[AppendTo[arrays, NetExtract[#Net, {3, "Weights"}]]], "Interval" -> Quantity[1, "Batches"]}, MaxTrainingRounds -> 10]ListStepPlot[First /@ Flatten /@ arrays]arrays = {};NetTrain[net, {1 -> 0, 0 -> 1}, TrainingProgressFunction -> {Function[AppendTo[arrays, NetExtract[#Net, {3, "Weights"}]]], "Interval" -> Quantity[1, "Batches"]}, MaxTrainingRounds -> 10]ListStepPlot[First /@ Flatten /@ arrays]テクニカルノート
テキスト
Wolfram Research (2020), TrainingUpdateSchedule, Wolfram言語関数, https://reference.wolfram.com/language/ref/TrainingUpdateSchedule.html.
CMS
Wolfram Language. 2020. "TrainingUpdateSchedule." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/TrainingUpdateSchedule.html.
APA
Wolfram Language. (2020). TrainingUpdateSchedule. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/TrainingUpdateSchedule.html
BibTeX
@misc{reference.wolfram_2026_trainingupdateschedule, author="Wolfram Research", title="{TrainingUpdateSchedule}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/TrainingUpdateSchedule.html}", note=[Accessed: 27-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_trainingupdateschedule, organization={Wolfram Research}, title={TrainingUpdateSchedule}, year={2020}, url={https://reference.wolfram.com/language/ref/TrainingUpdateSchedule.html}, note=[Accessed: 27-October-2026]}