機械学習モデルは、これまで以上に実稼働環境で広く使用されるようになりました。 Keras は、強力な機械学習およびディープラーニング モデルを作成するための人気のあるライブラリの 1 つです。ただし、実際のデータとモデル アーキテクチャによっては、これらのモデルのトレーニング プロセスは計算コストが高く、時間がかかることがよくあります。モデルによっては、トレーニングに数週間から数か月かかるものもあります。したがって、モデルをローカルに保存し、予測が必要になったときに再度取得できることが重要になります。しかし、何らかの理由で保存したモデルが正しく読み込まれない場合はどうすればよいでしょうか? 自分の経験に基づいて回答してみたいと思います。 Keras モデルの使用方法と保存方法については詳しく説明しません。読者がこのプロセスに精通していることを前提として、ロード時に予期しないモデルの動作に対処する方法に直接進みます。つまり、Model 変数に保存されている Keras モデルをトレーニングした後、そのまま保存して、次回ロードするときにトレーニングをスキップして予測のみを行えるようにします。 私が好むアプローチは、モデルの作成時にランダムに生成され、モデルのトレーニング時に更新されるモデルの重みを保存することです。そこで、model.save_weights("model.h5")をクリックしました。モデルによって学習された重みを含む「model.h5」ファイルが作成されます。次に、別のセッションで、以前と同じアーキテクチャを使用してモデルを再構築し、 new_model.load_weights("model.h5") を使用して保存したトレーニング済みの重みをロードしました。すべて順調のようです。ただ、new_model.predict(test_data) をクリックした後、精度がゼロになるのですが、その理由はわかりません。 モデルが正しい予測を行えない理由はたくさんあることが判明しました。この記事では、最も一般的な原因をまとめ、その解決方法について説明します。 1. まずデータを注意深く確認してください。明らかなことのように思えますが、1 つのミスが、ディスクからモデルを再ロードするときにパフォーマンスの低下につながる可能性があります。たとえば、言語モデルを構築する場合は、新しいセッションごとに次の操作を実行する必要があります。
もちろん、作業する分野によっては、他のデータ関連の問題に遭遇する可能性もあります。ただし、データ表現の一貫性は常に確認してください。 2. メトリクスの問題エラーや一貫性のない結果のもう一つの原因は、精度測定の選択です。モデルを構築してその重みを保存するときは、通常、次の操作を行います。 def build_model ( max_len , n_tags ): 新しいセッション/スクリプトで開く必要がある場合は、次の操作を行う必要があります。 def build_model ( max_len , n_tags ): 使用される特定の Keras/Tensorflow バージョンによっては、エラーが発生する可能性があります。この問題は、モデルをコンパイルし、メトリックとして「精度」を選択すると発生します。 Keras は、「スパース分類精度」、「分類精度」など、さまざまな精度の定義を認識します。作業するデータに応じて、異なる定義が推奨されるソリューションとなります。これは、メトリックを「精度」に設定すると、Keras は、データ分布に最も適していると思われる特定の精度タイプのいずれかを割り当てようとするためです。実行ごとに異なる精度メトリックが推測される可能性があります。ここでの最善の解決策は、Keras に精度メトリックを選択させるのではなく、常に精度メトリックを明示的に設定することです。例えば、 モデル. コンパイル( オプティマイザ= "adam" 、 次と置き換えます: モデル. コンパイル( オプティマイザ= "adam" 、 3. ランダム性以前と同じデータで Keras ニューラル ネットワークを再トレーニングする場合、同じ結果が 2 回得られることはほとんどありません。これは、Keras のニューラル ネットワークが重みを初期化するときにランダム性を使用するため、重みは実行するたびに異なる方法で初期化され、学習プロセス中に異なる方法で更新され、予測を行うときに同じ精度の結果が得られにくくなるためです。 何らかの理由でトレーニング前に重みを等しくする必要がある場合は、コードの前の部分で乱数ジェネレーターを設定できます。 numpy.random からシードをインポートします numpy ランダム シードは Keras に使用されますが、Tensorflow バックエンドでは独自の乱数ジェネレーターを同じシードに設定する必要があります。このコード スニペットにより、コードを実行するたびにニューラル ネットワークの重みが同じように初期化されるようになります。 4. カスタムレイヤーの使用に注意するKeras は多くのレイヤー (Dense、LSTM、Dropout、BatchNormalization など) を提供しますが、モデル内のデータに対して特定のアクションを実行したいのに、そのための特定のレイヤーが定義されていない場合があります。一般的に、Keras は Lambda レイヤー クラスと基本レイヤー クラスの 2 種類のレイヤーを提供します。ただし、特にモデル アーキテクチャを json 形式で保存する場合は、これら 2 つのレイヤーに注意してください。 Lambda レイヤーの難しい部分は、シリアル化の制限です。これは Python バイトコードのシリアル化とともに保存されるため、保存されたのと同じ環境にのみロードでき、移植性はありません。この問題が発生した場合は、通常、モデル全体を保存するのではなく、keras.layers.Layer レイヤーを上書きするか、その重みのみを保存してモデルを最初から再構築することをお勧めします。 5. カスタムオブジェクト多くの場合、カスタム関数を使用してデータに適用したり、損失/精度などのメトリックを計算したりする必要があります。 Keras では、モデルの保存/読み込み時に追加のパラメータを指定できるため、これが可能になります。以前に保存したモデルとともに、独自に作成した特別な損失関数をロードするとします。 モデル= load_model ( "model.h5" 、 custom_objects = このモデルを新しい環境にロードする場合、デフォルトではモデルを保存するときにこれらの関数は記憶されないため、新しい環境で custom_loss 関数を定義するように注意する必要があります。モデルのアーキテクチャ全体を保存したとしても、そのカスタム関数の名前も保存されますが、関数本体は追加で提供する必要があるものです。 6. グローバル変数初期化子これは、バックエンドとして Tensorflow 1.x を使用する場合に特に重要です。多くのアプリケーションでそのバックエンドが依然として必要になる可能性があります。 tf 1.x セッションを実行するときは、すべての変数をランダムに初期化する tf.global_variables_initializer() を実行する必要があります。この副作用として、モデルを保存しようとすると、すべての重みが再初期化される可能性があります。次のコマンドを実行すると、この動作を手動で停止できます。 keras.backend からmanual_variable_initialization をインポートします。manual_variable_initialization ( True ) 結論この記事では、新しい環境で Keras モデルが正しく読み込まれない最も一般的な原因となるいくつかの要因を示します。これらの問題によって予期しない結果が発生する場合もあれば、単にエラーが発生するだけの場合もあります。これらがいつどのように発生するかは、使用している Python のバージョンや Tensorflow および Keras のバージョンによって大きく異なります。これらのバージョンの中には互換性がないものもあり、予期しない動作につながる可能性があります。この記事を読めば、次にこの種の問題に遭遇したときにどこから始めればよいかがわかるようになるでしょう。 元のタイトル: 以前に保存した Keras モデルをロードすると異なる結果になる理由: 学んだ教訓、著者: Kristina Popova |
<<: 機械学習は金融自動化においてどのような役割を果たすのでしょうか?
>>: エヌビディアによる660億ドルのアーム買収は失敗、ソフトバンクはIPOを通じてアームの事業を独立上場へ
多くのことは国や地域の規制の対象となりますが、人間の表情を認識する能力はいかなる規制も超越しています...
人工知能技術は、おもちゃ、オンライン アプリケーション、ビデオ ゲームに組み込まれています。AI ア...
[[401300]]データ ライフサイクルの管理は、自動運転車の開発において重要な部分です。自動運転...
温かく思いやりのある、一緒にいてくれる「ダバイ」が欲しいと願う人は多いだろうが、ダバイのように人間の...
12月2日、OpenAIのChatGPTチームはGPT開発者に手紙を送り、「GPTストア」が202...
10月9日のニュースによると、AIビッグモデルは近年、人工知能の分野で話題になっており、リアルなテ...
AI を活用して製造効率を向上させ、インテリジェントな自動化で業界を変革します。製造業は人工知能技...
過去2023年間で、大規模言語モデル(LLM)は潜在力と複雑さの両面で急速に成長しました。 2024...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
人工知能は過去1年間で大きな進歩を遂げ、人々にますます多くの利益をもたらしました。将来的には、マシン...
[[388064]]基本的な紹介ハッシュ テーブル (ハッシュ テーブルとも呼ばれます) は、キー...
視覚効果 (VFX) の分野における AI の統合は、シームレスでデータ主導のアプローチを導入するこ...
[[423163]]近年、マルチエージェント強化学習は飛躍的な進歩を遂げています。例えば、Deep...
機械学習には高い処理要件があり、通信コストがかかることから、最終的にはエッジ(スマートフォン)で動作...