1

CloudML で MNIST の分散バージョンを使用していますが、トレーニング フェーズ中に表示されるログを理解できません。

INFO:root:Train [master/0], step 1693: Loss: 1.176, Accuracy: 0.464 (760.724 sec) 4.2 global steps/s, 4.2 local steps/s
INFO:root:Train [master/0], step 1696: Loss: 1.175, Accuracy: 0.464 (761.420 sec) 4.3 global steps/s, 4.3 local steps/s
INFO:root:Eval, step 1696: Loss: 0.990, Accuracy: 0.537
INFO:root:Train [master/0], step 1701: Loss: 1.175, Accuracy: 0.465 (766.337 sec) 1.0 global steps/s, 1.0 local steps/s

一度に 200 以上のサンプルをランダムにバッチ処理しています。

通常は反対であるのに、Train acc/loss と Eval acc/loss の間にこのようなギャップがあるのはなぜですか?

また、グローバルステップとローカルステップの違いは何ですか?

私が話しているコードはhereです。task.py は、グラフが作成されるファイルである model.py を呼び出しています。

4

4 に答える 4

1

報告されているトレーニング測定値は、そのステップで使用される例の「ミニバッチ」のみで計算されます (この場合は 200)。評価測定値は、評価セット全体について報告されます。

そのため、ミニバッチ トレーニングの統計にはかなりのノイズが含まれます。

于 2016-10-28T23:43:07.743 に答える
1

例のコードをさらに調査した結果、問題は、トレーニング データで報告された精度が移動平均であるということです。したがって、現在のステップで報告された平均は、実際には多くのステップ前の平均の影響を受けており、通常はこれよりも低くなります。前のステップで平均化しないことで、サンプルを更新します。

于 2016-11-01T05:46:47.250 に答える
1

RE: Train acc/loss と Eval acc/loss のギャップ

これは、指数移動平均を使用してバッチ間の損失と精度を平滑化した結果です (そうしないと、プロットに非常にノイズが多くなります)。評価セットとトレーニング セットでメトリックが計算される方法は異なります。

  • 評価セットの損失と精度は、評価セット内のサンプルのすべてのバッチの移動指数平均を使用して計算されます。評価の実行ごとに移動平均がリセットされるため、各ポイントは単一の実行を表します。また、すべての評価ステップは、一貫したチェックポイント (重みの一貫した値)。

  • トレーニング セットの損失と精度は、トレーニング プロセス中にトレーニング セット内のサンプルのすべてのバッチの移動指数平均を使用して計算されます。移動平均はリセットされないため、過去の情報を長期間持ち越すことができます。チェックポイント。これは、メトリクスの概算を計算するのに安価です。

一貫した方法でトレーニングと評価セットの損失を計算する更新されたサンプルを提供します。驚くべきことに、更新を行っても、最初の評価セットはトレーニング セットよりも高い精度を獲得します。おそらく、すべてのデータが適切にシャッフルされておらず、トレーニング セットと評価セットにランダムに分割されていませんでした。また、評価セットには、データのわずかに「簡単な」サブセットが含まれています。より多くのトレーニング ステップの後、分類子はトレーニング データをオーバー フィットし始め、トレーニング セットの精度は評価セットの精度を上回ります。

RE: グローバル ステップとローカル ステップの違いは何ですか? ローカル ステップは、単一のワーカーによって処理されるバッチの数です (各ワーカーはこの情報をログに記録します)。グローバル ステップは、すべてのワーカーによって処理されるバッチの数です。単一のワーカーが使用される場合、2 つの数値は等しくなります。分散設定でより多くのワーカーを使用する場合、グローバル ステップ > ローカル ステップ。

于 2016-11-01T23:33:55.860 に答える