Keras は、独自のディープラーニング モデルを迅速に構築およびトレーニングするのに役立つ、可用性の高い Python API をいくつか提供します。バックエンドは TensorFlow または Theano です。この記事は、読者が TensorFlow と畳み込みニューラル ネットワークについてすでに理解していることを前提としています。まだ理解していない場合は、まずこの 10 分間の TensorFlow 入門チュートリアルとこの畳み込みニューラル ネットワーク チュートリアルを読んでから、この記事に戻って読んでください。 このチュートリアルでは、次の点について学習します。 1. Keras を選んだ理由は何ですか? Keras がディープラーニングの未来だと考えられているのはなぜですか? 2. Ubuntu に Keras を段階的にインストールします。 3.Keras TensorFlow チュートリアル: Keras の基礎。 4. Kerasシーケンスモデルを理解する 4.1 線形回帰問題を説明するための実例 5. Kerasを使用して事前トレーニング済みモデルを保存および復元する 6. ケラスAPI 6.1 Keras API を使用した VGG 畳み込みニューラル ネットワークの開発 6.2 Keras APIを使用してSqueezeNet畳み込みニューラルネットワークを構築して実行する 1. なぜ Keras なのか? Keras は、Google のエンジニアである François Chollet によって開発されたフレームワークで、Theano で迅速なプロトタイピングを行うのに役立ちます。その後、バックエンドとして TensorFlow もサポートするように拡張されました。そして最近、TensorFlow はこれを contrib ファイルの一部として提供することを決定しました。 Keras はニューラル ネットワーク構築の未来と考えられています。Keras が人気がある理由をいくつか挙げます。
毎年新しいフレームワークを学ぶのがどれだけ大変か想像してみてください。今のところ、TensorFlow がトレンドのようですが、ますます多くのフレームワークが Keras のサポートを開始するにつれて、Keras が標準になる可能性があります。 現在、Keras は最も急速に成長しているディープラーニング フレームワークです。さまざまなディープラーニングフレームワークをバックエンドとして使用できるという事実は、それが人気を博した大きな理由です。興味深い論文を読んで、自分のデータセットでモデルをテストしたいというシナリオを想像してみてください。ここでも、TensorFlow には精通しているが、Theano についてはほとんど知らないと仮定しましょう。次に、TensorFlow を使用してこの論文を再現する必要がありますが、このサイクルは非常に長くなります。ただし、現在のコードが Keras で記述されている場合は、バックエンドを TensorFlow に変更するだけでコードを使用することができます。これはコミュニティの発展に大きな後押しとなるでしょう。 2. Kerasをインストールし、バックエンドとしてTensorFlowを使用する方法 a) 依存関係のインストール モデルの保存と読み込みのために h5py をインストールします。
インストールする必要がある依存パッケージもいくつかあります。
TensorFlow がまだインストールされていない場合は、このチュートリアルに従ってまず TensorFlow をインストールしてください。 TensorFlow をインストールしたら、pip を使用して Keras を簡単にインストールできます。
Keras のバージョンを確認するには、次のコマンドを使用します。
Keras をインストールしたら、バックエンド ファイルを変更して、バックエンドとして TensorFlow が必要か、Theano が必要かを決定する必要があります。変更された構成ファイルは、~/.keras/keras.json にあります。具体的な構成は以下のとおりです。
パラメータ image_data_format がchannels_last であることに注意してください。これは、バックエンドが TensorFlow であることを意味します。なぜなら、TensorFlow では画像は [高さ、幅、チャンネル] として保存されますが、Theano ではまったく異なり、[チャンネル、高さ、幅] として保存されるからです。したがって、このパラメータを正しく設定しないと、モデルの中間結果が非常に奇妙なものになります。 Theano の場合、このパラメータはchannels_first です。 これで、バックエンドとして Keras と TensorFlow を使用してモデルを構築する準備が整いました。 3. Kerasの基本 Keras の主なデータ構造は、完全なグラフを定義するモデルです。既存のグラフに任意のネットワーク構造を追加できます。
Keras には 2 つの異なるモデリング方法があります。
この記事の次のセクションでは、Keras の Sequential モデルと Functional API の理論と例について学習します。 4. Keras シーケンシャルモデル このパートでは、Keras Sequential モデルの理論を紹介します。どのように動作するかを簡単に説明し、コードもいくつか使用して説明します。その後、単純な線形回帰問題を解き、読みながらコードを実行してアイデアを強化します。 次のコードは、シーケンス モデルのインポートと構築を開始する方法を示しています。
次に、Dense (完全接続層)、Activation、Conv2D、MaxPooling2D 関数をモデルに追加できます。
ネットワークにクールなレイヤーを追加する方法は次のとおりです。畳み込みニューラル ネットワークのチュートリアルでは、レイヤーの説明についてすでに詳しく説明しました。 1). 畳み込み層 ここでは、64 個の畳み込みカーネルと 33 次元の畳み込み層を使用し、活性化には relu 活性化関数を使用します。入力データの次元は `100100*32` です。なお、最初の畳み込み層の場合は入力データの次元を追加する必要があり、以降のパラメータは省略できます。
2). MaxPooling レイヤー レイヤーの種類と赤のサイズを指定すると、赤の操作が自動的に完了します。すごいですね!
3). 完全接続層 このレイヤーは、Keras では Dense レイヤーと呼ばれます。出力レイヤーの次元を設定するだけで、Keras が自動的に設定してくれます。
4). ドロップアウト
5). フラットレイヤー
データ入力 ネットワークの最初の層ではトレーニング データを読み込む必要があります。したがって、入力データの次元を指定する必要があります。したがって、input_shape パラメータは、入力データの次元サイズを指定するために使用されます。
この例では、データ入力の最初の層は畳み込み層であり、入力データのサイズは 224*224*3 です。 上記の操作は、シーケンス モデリングを使用してモデルを構築するのに役立ちます。次に、最も重要な部分を学びましょう。ネットワーク アーキテクチャを指定したら、オプティマイザーと損失関数も指定する必要があります。この機能を実現するには、Keras のコンパイル関数を使用します。たとえば、次のコードでは、オプティマイザーとして rmsprop を使用し、損失関数として binary_crossentropy を使用します。
確率的勾配降下法を使用する場合は、適切な初期化とハイパーパラメータを選択する必要があります。
これで、モデルの構築が完了しました。次に、Keras の fit 関数を使用してモデルにデータを入力してみましょう。この関数では、トレーニングする batch_size と epochs を指定することもできます。
***、evaluate 関数を使用してモデルのパフォーマンスをテストします。
これらは、シーケンシャル モデルを使用して Keras でニューラル ネットワークを構築する手順です。それでは、単純な線形回帰モデルを構築してみましょう。 4.1 線形回帰問題を説明するための実例 問題の説明 線形回帰の問題では、多数のデータ ポイントを取得し、これらの離散ポイントに直線を当てはめる必要があります。この例では、100 個の個別のポイントを作成し、それらに直線を当てはめました。 a) トレーニングデータを作成する TrainX のデータ範囲は -1 ~ 1、TrainY と TrainX の関係は 3 倍で、いくつかのノイズ ポイントを追加します。
b) モデルを構築する まず、シーケンス モデルを構築する必要があります。必要なのは単純な接続だけなので、Dense レイヤーを使用し、アクティベーションに線形関数を使用するだけです。
次のコードは、入力データ x、重み w、バイアス項 b を設定します。具体的な初期化作業を見てみましょう。次のように:
ここで、構築したデータ trX と trY を使用してこの線形モデルをトレーニングできます。ここで、trY は trX の 3 倍です。したがって、重み w の値は 3 になります。 最適化には単純勾配降下法を使用し、損失値には平均二乗誤差 (MSE) を使用します。次のように:
***、fit 関数を使用してデータを入力します。
トレーニング後、重みを再度出力します。
ご覧のとおり、200 エポックを実行した後、重みは 3 に非常に近くなります。実行回数を [100, 300] の範囲に変更し、出力構造がどのように変化するかを観察できます。これで、非常に少ないコードで線形回帰モデルを構築する方法を学びました。同じモデルを TensorFlow で構築するには、さらに多くのコードが必要になります。 5. Kerasを使用して事前トレーニング済みモデルを保存および復元する HDF5バイナリ形式 Keras でのトレーニングが完了したら、ネットワークを HDF5 に保存できます。もちろん、最初に h5py をインストールする必要があります。 HDF5 形式は、大量の数値を保存し、numpy からこのデータを処理するのに適しています。たとえば、ディスクに保存されている数テラバイトのデータセットを、実際の NumPy 配列であるかのように簡単に細分化できます。また、複数のデータセットを 1 つのファイルに保存したり、それらを反復処理したり、.shape 属性や .dtype 属性を表示したりすることもできます。 信頼性が必要な場合は、NASA もデータ保存に HDF5 を使用しています。 h5py は、HDF5 C API 用の Python ラッパーです。 C の HDF5 でできることはほとんどすべて、Python の h5py でもできます。 重みを保存 トレーニング済みの重みを保存する場合は、 save_weights 関数を直接使用できます。
事前トレーニング済みの重みをロードする 以前にトレーニングしたモデルをロードする場合は、load_weights 関数を使用できます。
6. ケラスAPI 単純なモデルと問題であれば、シーケンス モデルは非常に優れたアプローチです。しかし、現実世界で複雑なネットワークを構築したい場合は、いくつかの機能 API を知っておく必要があります。多くの一般的なニューラル ネットワークでは、最小限のネットワーク構造があり、これらの最小限のモデルを重ね合わせることで完全なモデルが完成します。これらの基本 API を使用すると、レイヤーごとにモデルを構築できます。したがって、完全な複雑なニューラル ネットワークを構築するために必要なコードは非常に少なくなります。 どのように動作するか見てみましょう。まず、いくつかのパッケージをインポートする必要があります。
ここで、Sequential モデルではなく、最初の fit 関数で入力データを指定する必要があります。これは、シーケンス モデルとこれらの機能 API の最も重要な違いの 1 つです。 input() 関数を使用して 1*28*28 テンソルを宣言します。
ここで、API を使用して畳み込み層を設計してみましょう。畳み込みネットワークがどの層で使用されるかを指定する必要があります。具体的なコードは次のとおりです。
***、指定された入力データと出力データのモデルを構築します。
もちろん、損失関数やオプティマイザーなども指定する必要があります。ただし、これらはシーケンス モデルで実行した操作と同じであり、fit 関数と compile 関数を使用して操作を実行できます。 次に、大きくて「古い」モデルですが、シンプルなので学習に適したモデルである vgg-16 モデルを構築しましょう。 6.1 Keras API を使用した VGG 畳み込みニューラル ネットワークの開発 VGGG: いいえ VGG畳み込みニューラルネットワークは、2014年にオックスフォード大学によって提案されたモデルです。このモデルが提案されると、そのシンプルさと実用性により、当時最も人気のある畳み込みニューラル ネットワーク モデルになりました。画像分類とオブジェクト検出の両方のタスクで非常に優れた結果を示します。 2014 年の ILSVRC コンテストでは、VGG はトップ 5 で 92.3% の精度を達成しました。 このモデルにはいくつかのバリエーションがありますが、最も人気があるのは、もちろん 16 層のモデルである vgg-16 です。 224*224*3 次元の入力データが必要であることがわかります。 Vgg 16 アーキテクチャ このモデルを完全に実装するために別の関数を記述してみましょう。
この完成したモデルに vgg16.py という名前を付けることができます。 この例では、テストのために imageNet データセットからいくつかのデータを実行します。具体的なコードは次のとおりです。
画像からわかるように、モデルは画像内のオブジェクトの識別予測を行います。 API を通じて VGG モデルを構築しましたが、VGG は非常にシンプルなモデルであるため、API の機能を十分に開発できませんでした。次に、API の真の機能を実証するために SqueezeNet モデルを構築します。 6.2 Keras APIを使用してSqueezeNet畳み込みニューラルネットワークを構築して実行する SequeezeNet は注目すべきネットワーク アーキテクチャです。その注目すべき特徴は、正確性をどれだけ向上させるかではなく、計算量をどれだけ削減するかです。 SequeezeNet の正確さは AlexNet に近いですが、ImageNet の事前トレーニング済みモデルのストレージ サイズは 5 MB 未満であり、これは実際の世界で CNN を使用するのに非常に有益です。 SqueezeNet モデルは、交互に配置される Squeeze モジュールと Expand モジュールで構成される Fire モデルを導入します。 SqueezeNet 火災モジュール ここで、次のように、火災モデルを複数回複製して完全なネットワーク モデルを構築します。 このネットワークを構築するには、まず API を使用して別の火災モジュールを構築します。
このコードを再利用するには、関数に変換します。
モジュール処理
これで、構築した個別の火災モジュールを使用して完全なモデルを構築できます。
完全なネットワーク モデルは squeezenet.py ファイルに配置されます。まず、imageNet の事前トレーニング済みモデルをダウンロードし、独自のデータセットでトレーニングしてテストする必要があります。次のコードはこの機能を実装します。
同じ画像予測に対して、次の予測確率を得ることができます。
これで Keras TensorFlow チュートリアルは終了です。これが役に立つことを願っています。 |
<<: JD.com JDataアルゴリズムコンテスト決勝戦が無事終了、優勝賞金30万人民元は「魯班第7号」に
>>: スマートコミュニティはどれくらい「スマート」なのでしょうか?知能の背後にある技術的応用を解釈する
今日の新しいテクノロジーの進歩により、私たちは皆、データの重要性を認識しています。データは新たな石油...
必要な変更。医療制度と支払者(政府と民間の両方)において、この用語は患者への不必要なリスク、医療の質...
[[317132]]出典:中国ビジネスニュースマイクロソフトの元副社長、ハリー・シャム博士が学界復...
テクノロジーは建設業界にかつてないほど大きな影響を与えています。クラウドベースのコラボレーションやデ...
大規模言語モデル (LLM) は、自然言語理解、言語生成、複雑な推論など、多くの重要なタスクにおいて...
コンシステント ハッシュ アルゴリズムは、1997 年にマサチューセッツ工科大学によって提案された分...
過去 10 年間で世界中のスマートフォン ユーザーの数は急増しており、今後も同様の増加傾向が続くと思...
人工知能は進歩し続け、企業の運営方法や私たち自身の日常の経験を変えています。実際、AI はほぼすべて...
コンピューターが登場する前には、アルゴリズムがありました。コンピュータの誕生により、コンピュータの強...