Caffe では、セマンティック セグメンテーションのために完全畳み込みネットワークを実装しようとしています。'solver.prototxt'
次のハイパーパラメータの値を設定するための特定の戦略があるのだろうかと思っていました:
- test_iter
- テスト間隔
- iter_size
- max_iter
トレーニング セット用の画像の数に依存しますか? もしそうなら、どのように?
Caffe では、セマンティック セグメンテーションのために完全畳み込みネットワークを実装しようとしています。'solver.prototxt'
次のハイパーパラメータの値を設定するための特定の戦略があるのだろうかと思っていました:
トレーニング セット用の画像の数に依存しますか? もしそうなら、どのように?
これらの値を意味のある方法で設定するには、データに関するいくつかの情報が必要です。
1. トレーニング セットのサイズは、トレーニング サンプルの総数です。この量を と呼びましょうT
。
2. トレーニング バッチ サイズは、1 つのバッチで一緒に処理されるトレーニング サンプルの数です。通常、これは の入力データ レイヤーによって設定されます'train_val.prototxt'
。たとえば、このファイルでは、トレーニング バッチ サイズが 256 に設定されています。この量を で表しましょうtb
。
3. 検証セットのサイズモデルを検証するために取っておいた例の総数です。これを で表しましょうV
。
4.batch_size
TEST フェーズに設定された検証バッチ サイズの値。この例では 50 に設定されています。これを と呼びましょうvb
。
ここで、トレーニング中に、ネットのパフォーマンスの偏りのない推定値を時々取得したいと考えています。これを行うには、test_iter
反復用の検証セットでネットを実行します。検証セット全体をカバーするには、test_iter = V/vb
.
どのくらいの頻度でこの見積もりを取得しますか? それは本当にあなた次第です。検証セットが非常に大きく、ネットが遅い場合、検証の頻度が高すぎると、トレーニング プロセスが長くなりすぎます。一方、十分な頻度で検証しないと、トレーニング プロセスが収束に失敗したかどうか、いつ収束に失敗したかがわからない可能性があります。test_interval
検証する頻度を決定します。通常、大規模なネットの場合test_interval
は 5K のオーダーで設定し、小さくて高速なネットの場合は、より低い値を選択できます。繰り返しますが、すべてあなた次第です。
T/tb
トレーニング セット全体をカバーする (「エポック」を完了する) には、反復を実行する必要があります。通常、1 つは複数のエポックのトレーニングを行うため、max_iter=#epochs*T/tb
.
に関してiter_size
:これにより、いくつかのトレーニングミニバッチで勾配を平均化できます。詳細については、このスレッドを参照してください。