Julia Fluxでニューラルネットワークトレーニングモード、テストモードの設定方法
説明
ニューラルネットワークの構造では、トレーニングプロセスとテストプロセスで異なる動作が必要な部分があります。例えば、ドロップアウトはトレーニング中には適用されるべきですが、トレーニングが終わった後のテストや実際の使用中には適用されるべきではありません。このような場合、トレーニングモードとテストモードを区別して使用する必要があります。
コード
ニューラルネットワークをトレーニングモードに切り替える関数は trainmode!
、テストモードに切り替える関数は testmode!
です。各関数によってDropout
とBatchNorm
レイヤーの活性化状態が変更されます。
julia> using Flux
julia> net = Chain(
Dense(2 => 4),
Dropout(0.4),
)
Chain(
Dense(2 => 4), # 12 parameters
Dropout(0.4),
)
julia> trainmode!(net)
Chain(
Dense(2 => 4), # 12 parameters
Dropout(0.4, active=true),
)
julia> net(ones(2, 5))
4×5 Matrix{Float32}:
0.0 0.0 0.0 0.0 0.122787
2.28202 0.0 0.0 2.28202 2.28202
-1.11088 -0.0 -1.11088 -1.11088 -0.0
0.995571 0.0 0.995571 0.0 0.995571
julia> trainmode!(net)
Chain(
Dense(2 => 4), # 12 parameters
Dropout(0.4, active=false),
)
julia> net(ones(2, 5))
4×5 Matrix{Float32}:
0.0736724 0.0736724 0.0736724 0.0736724 0.0736724
1.36921 1.36921 1.36921 1.36921 1.36921
-0.666526 -0.666526 -0.666526 -0.666526 -0.666526
0.597343 0.597343 0.597343 0.597343 0.597343
環境
- OS: Windows11
- Version: Julia 1.10.0, Flux v0.14.15