3

ヒューリスティックに、2 つの別々のソースからストリーミングされたデータを使用してニューラル ネットワークをトレーニングしています。

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --oaa 10 --nn 20 --save_resume -i /tmp/weights -f /tmp/weights

ただし、これは「--oaa を複数回渡すことはできません」というエラーが発生します。結構です、--save_resume構成引数を保持しているので、私は改訂しました:

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --save_resume -i /tmp/weights -f /tmp/weights

そしてすべてがうまくいきました。好奇心から、--save_resumeオプションなしで 2 番目のアプローチを繰り返しましたが、モデルのパフォーマンスがわずかに低下したことを除いて、すべてが機能しました。

--save_resume重みファイルに見られる学習率と例の数を保存すると推測します。これは、出力から発生しているように見えたものであり、パフォーマンスの向上を裏付けています。他に何かありますか?

編集:少し実験した後、最初のリグレッサーを経由して渡すと-i、「オプション '--oaa' を複数回指定することはできません」というエラーが発生することがわかりました--save_resume

4

2 に答える 2

4

あなたの推測は正しいです。--save_resumeで最初のトレーニングを使用しない場合train1.vw、モデルに/tmp/weightsは学習率やその他の状態情報が含まれません (たとえば--adaptive、 は VW でデフォルトで使用されるため、機能ごとに学習率があります)。これは最終モデルの品質に影響を与える可能性があり、通常は悪化します。

平均損失として報告される数値が異なるもう 1 つの理由は、を使用しない場合--save_resume、VW が特定のデータ ( train1.vwresp. train2.vw) の平均のみを計算することです。

の考え方は、2 つのステップでトレーニングするときに--save_resume、同じ最終的な平均損失を得る必要があるということです。

cat train1.vw | vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw | vw --save_resume -i /tmp/weights -f /tmp/weights

ワンステップでトレーニングするとき

cat train1.vw train2.vw | vw --oaa 10 --nn 20 -f /tmp/weights

関連する解決済みの GitHub の問題を参照してください。

于 2015-01-26T10:08:46.557 に答える
1

ここで最近導入されたバグがあったようです。私はそのチケットを記録しました: https://github.com/JohnLangford/vowpal_wabbit/issues/554

更新:彼らはすでにマスターで修正しました。だから必ず引く。

于 2015-03-10T15:05:33.297 に答える