第18章. デバッグする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
組込み製品であれ、そうでない製品であれ、機械学習を製品に組み込んでいくうちに、おそらく遅かれ早かれ、混乱するようなエラーに出くわすことになるだろう。この章では、物事がうまくいかないときに何が起こっているのかを理解するためのいくつかのアプローチについて説明する。
トレーニングからデプロイまでの間の精度低下
TensorFlowのようなオーサリング環境から機械学習モデルを取り出してアプリケーションにデプロイするとき、問題が忍び込む方法はたくさんある。エラーを報告することなくモデルを構築し、実行することができたとしても、精度の点で期待した結果が得られないかもしれない。ニューラルネットワークの推論ステップは、内部で何が起こっているのか、何が問題を引き起こしているのかが全く見えないブラックボックスのように見えることがあるため、これは非常にフラストレーションがたまる。
前処理の違い
機械学習の研究であまり注目されていないのが、学習サンプルをニューラルネットワークが演算できる形に変換する方法だ。画像に対してオブジェクト分類を行おうとする場合、画像はテンソル(数値の多次元配列)に変換されなければならない。画像はすでに2次元配列として保存されており、通常は赤、緑、青の3つのチャンネルを持つ。しかしこの場合でも、いくつかの変更を加える必要がある。分類モデルは特定の幅と高さ、例えば幅224ピクセル×高さ224ピクセルの入力を想定しており、カメラやその他の入力ソースが正しいサイズの入力を生成する可能性は低い。つまり、キャプチャしたデータをそれに合わせて再スケーリングする必要がある。おそらくデータセットはディスク上の任意の大きさの画像のセットになるだろうから、同様のことを学習プロセスでも行わなければならない。
しばしば忍び込む微妙な問題は、デプロイに使われたリスケーリングメソッドが、モデルのトレーニングに使われたものと一致しないことだ。例えば、Inceptionの初期バージョンは画像を縮小するためにバイリニア・スケーリングを使用していたが、この方法は画像の視覚的品質を劣化させるため、一般的には避けるべきものである。その結果、これらのモデルをアプリケーションの推論に使用する開発者の多くは、代わりに面積サンプリングという、より正しいアプローチを使用したが、これは実際には結果の精度を低下させることが判明した!直感的には、学習済みのモデルはバイリニア・ダウンスケーリングが生み出す成果物を探すことを学習しており、それがないためにトップ1のエラー率が数パーセント上昇したのだ。
画像の前処理は、再スケーリングのステップだけにとどまらない。通常0から255でエンコーディングされる画像値を、学習時に使用する浮動小数点数にどのように変換するかという問題もある。いくつかの理由から、これらは通常、-1.0から1.0または0.0から1.0という小さな範囲にリニアにスケーリングされる。浮動小数点値を入力する場合、アプリケーションでも同じように値をスケーリングする必要がある。8ビット値を直接入力する場合は、ランタイムでこれを行う必要はない。元の8ビット値は変換せずに使用できるが、--mean_values および--std_values フラグを通してtoco エクスポート・ツールに渡す必要がある。1.0から1.0の範囲なら、--mean_values=128 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access