ディープ ニューラル ネットワーク モデルの複雑さが非常に高い場合、保有するデータの量、モデルを実行しているハードウェアなどに応じて、トレーニングにかなりの時間がかかることがあります。ほとんどの場合、中断した(またはミスをした)場合でもミスなく中断したところから続行できるように、ファイルを保存して実験の安定性を確保する必要があります。 さらに重要なのは、TensorFlow のようなディープラーニング フレームワークでは、トレーニングが成功した後、モデルの学習したパラメータを再利用して新しいデータに対する予測を行う必要があることです。
この記事では、TensorFlow モデルを保存および復元する方法について説明します。最も便利な方法を紹介し、いくつかの例を示します。 1. まずTensorFlowモデルを簡単に紹介します TensorFlow の主な機能は、NumPy の多次元配列に似たテンソルを通じて基本的なデータ構造を伝達し、グラフがデータ計算を表すことです。これはシンボリック ライブラリであり、グラフとテンソルを定義するとモデルのみが作成され、具体的な値の取得とテンソルの操作はセッションで実行され、グラフ内でモデリング操作を実行するためのメカニズムです。セッションが閉じられるとテンソルの具体的な値はすべて失われます。これが、セッションの実行後にモデルをファイルに保存するもう 1 つの理由です。 例を見たほうが理解しやすいので、2 次元データの線形回帰用の簡単な TensorFlow モデルを作成しましょう。 まず、ライブラリをインポートします。
次のステップはモデルを作成することです。次の形式で、二次関数の水平方向と垂直方向の変位を推定するモデルを生成します。
ここで、h は水平方向の変化、v は垂直方向の変化です。 モデルの生成方法は次のとおりです (詳細についてはコード内のコメントを参照してください)。
モデルを作成するプロセスでは、セッションでモデルを実行し、実際のデータを渡す必要があります。いくつかの二次データを生成し、それにノイズを追加します。
2. セーバークラス Saver クラスは TensorFlow ライブラリによって提供されるクラスです。グラフ構造と変数を保存するのに最適な方法です。 (1)モデルを保存する 次のコード行では、Saver オブジェクトを定義し、train_graph() 関数で 100 回の反復にわたってコスト関数を最小化します。次に、各反復と最適化が完了したら、モデルをディスクに保存します。ディスク上に作成される各保存は、「チェックポイント」と呼ばれるバイナリ ファイルと呼ばれます。
それでは、上記の関数を使用してモデルをトレーニングし、トレーニングされたパラメータを出力してみましょう。
はい、パラメータは非常に正確です。ファイル システムを確認すると、最終モデルだけでなく、最後の 4 回の反復から保存されたファイルがあります。 モデルを保存するときに、保存に必要なファイルが 4 種類あることに気付くでしょう。
図1: ディスクに保存されたチェックポイントファイル すべての変数をファイルに保存するには、上記のように tf.train.Saver() メソッドを呼び出します。変数のサブセットをリストまたは辞書として渡して保存します。例: tf.train.Saver({'hor_estimate': h_est})。 プロセス全体を制御できる Saver コンストラクターのその他の便利なパラメーターは次のとおりです。
TensorFlow モデルを復元するときに最初に行うことは、「.meta」ファイルから現在のグラフにグラフ構造を読み込むことです。
tf.get_default_graph() を使用して現在のグラフを探索することもできます。 2 番目のステップは、変数の値をロードすることです。注意: 値はセッション内にのみ存在します。
前述したように、このアプローチではグラフ構造と変数のみが保存されるため、プレースホルダー「X」と「Y」を通じて入力されたトレーニング データは保存されません。 とにかく、この例では、定義したトレーニング データ tf を使用して、モデルの適合を視覚化します。
Saver クラスを使用すると、TensorFlow モデル (グラフと変数) をファイルに簡単に保存および復元したり、作業の複数のチェックポイントを保存したりできるため、トレーニング中にモデルを微調整するのに役立ちます。 4. SavedModel 形式 TensorFlow でモデルを保存および復元する新しい方法は、SavedModel、Builder、および loader 関数を使用することです。このメソッドは、実際には Saver によって提供される高レベルのシリアル化であり、ビジネス目的に適しています。 この SavedModel アプローチは開発者に完全に受け入れられているようには見えませんが、作成者は「これは明らかに未来だ」と述べています。主に変数に焦点を当てた Saver クラスと比較して、SavedModel は、Signatures (入力と出力のセットを含むグラフを保存できるようにする) や Assets (初期化に使用される外部ファイルを含む) など、いくつかの便利な機能を 1 つのパッケージに含めるようにしています。 (1) SavedModel Builderを使用してモデルを保存する 次に、SavedModelBuilder クラスを使用してモデルを保存してみます。この例では、シンボルは使用していませんが、プロセスを説明するには十分です。
このコードを実行すると、モデルが「./SavedModel/saved_model.pb」にあるファイルに保存されていることがわかります。 (2)SavedModel Loaderプログラムを使用してモデルを復元する モデルの復元では tf.saved_model.loader が使用され、セッション スコープに保存された変数とシンボルを復元できます。 次の例では、モデルをロードし、2 つの係数 (h_est と v_est) の値を出力します。値は予想どおりで、モデルは正常に回復されました。
5. 結論 ディープラーニング ネットワークのトレーニングに長い時間がかかる可能性がある場合は、TensorFlow モデルの保存と復元が非常に役立ちます。このトピックは範囲が広すぎるため、1 つのブログ投稿で詳細を説明することはできません。とにかく、この投稿では、Saver と SavedModel ビルダー/ローダーという 2 つのツールを紹介し、ファイル構造を作成し、単純な線形回帰を使用して例を説明しました。これらが、より優れたニューラル ネットワーク モデルのトレーニングに役立つことを願っています。 |
<<: リソースインベントリ: 便利な自動データサイエンスおよび機械学習ソフトウェア
>>: 第一回美団クラウド人工知能サミットが開幕、エコパートナーと協力して最もオープンなAIプラットフォームを構築
[[202181]] 2015年、同社のエンジニアリング担当副社長であるXavier Amatri...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
9月22日は秋分の日であり、私の国では3回目の「農民の収穫祭」でもあります。収穫の季節と重なる黄金...
[[406029]] [51CTO.com クイック翻訳]人工知能 (AI) 研究の分野では、Ten...
[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...
Google はどのようにしてわずか数秒で Web ページ全体をさまざまな言語に翻訳するのか、ある...
強化学習は、エージェントが環境と対話し、蓄積された報酬を最大化するために最適なアクションを選択する方...
ソフトウェア開発者向けのローコード機能それでは、ソフトウェア開発者に機械学習機能を提供するローコード...
[[273182]]このガイドは、機械学習 (ML) に興味があるが、どこから始めればよいかわからな...
機械学習の場合、パラメータはアルゴリズムの鍵となります。パラメータは、履歴入力データであり、モデルト...
中国、上海、2021年10月22日 - エンタープライズレベルのスケーラブルなグラフ分析プラットフォ...