Keras TensorFlow チュートリアル: 複雑なディープラーニング モデルをゼロから開発する方法

Keras TensorFlow チュートリアル: 複雑なディープラーニング モデルをゼロから開発する方法

[[193126]]

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 が人気がある理由をいくつか挙げます。

  1. 軽量で開発が速い: Keras は定型コードを排除することを目指しています。数行の Keras コードで、ネイティブの TensorFlow コードよりも多くの機能を実現できます。 CNN と RNN を簡単に実装し、CPU または GPU 上で実行することもできます。
  2. フレームワークの勝者: Keras は、他のディープラーニング フレームワーク上で実行される API です。このフレームワークは TensorFlow または Theano になります。 Microsoft は、CNTK を Keras のバックエンドとして利用できるようにする計画もあります。現在、ニューラル ネットワーク フレームワークの世界は非常に断片化されており、急速に進化しています。詳細については、Karpathy のこのツイートをご覧ください。

毎年新しいフレームワークを学ぶのがどれだけ大変か想像してみてください。今のところ、TensorFlow がトレンドのようですが、ますます多くのフレームワークが Keras のサポートを開始するにつれて、Keras が標準になる可能性があります。

現在、Keras は最も急速に成長しているディープラーニング フレームワークです。さまざまなディープラーニングフレームワークをバックエンドとして使用できるという事実は、それが人気を博した大きな理由です。興味深い論文を読んで、自分のデータセットでモデルをテストしたいというシナリオを想像してみてください。ここでも、TensorFlow には精通しているが、Theano についてはほとんど知らないと仮定しましょう。次に、TensorFlow を使用してこの論文を再現する必要がありますが、このサイクルは非常に長くなります。ただし、現在のコードが Keras で記述されている場合は、バックエンドを TensorFlow に変更するだけでコードを使用することができます。これはコミュニティの発展に大きな後押しとなるでしょう。

2. Kerasをインストールし、バックエンドとしてTensorFlowを使用する方法

a) 依存関係のインストール

モデルの保存と読み込みのために h5py をインストールします。

  1. h5py をインストールします

インストールする必要がある依存パッケージもいくつかあります。

  1. pip インストール numpy scipy
  2.  
  3. pip インストール枕

TensorFlow がまだインストールされていない場合は、このチュートリアルに従ってまず TensorFlow をインストールしてください。 TensorFlow をインストールしたら、pip を使用して Keras を簡単にインストールできます。

  1. sudo pip kerasをインストール

Keras のバージョンを確認するには、次のコマンドを使用します。

  1. >>> keras をインポートする
  2. TensorFlow バックエンドを使用します。
  3. >>> keras.__バージョン__
  4. '2.0.4'  

Keras をインストールしたら、バックエンド ファイルを変更して、バックエンドとして TensorFlow が必要か、Theano が必要かを決定する必要があります。変更された構成ファイルは、~/.keras/keras.json にあります。具体的な構成は以下のとおりです。

  1. {
  2. "floatx" : "float32"
  3. 「イプシロン」 : 1e-07,
  4. 「バックエンド」 : 「テンソルフロー」
  5. "image_data_format" : "channels_last"  
  6. }

パラメータ image_data_format がchannels_last であることに注意してください。これは、バックエンドが TensorFlow であることを意味します。なぜなら、TensorFlow では画像は [高さ、幅、チャンネル] として保存されますが、Theano ではまったく異なり、[チャンネル、高さ、幅] として保存されるからです。したがって、このパラメータを正しく設定しないと、モデルの中間結果が非常に奇妙なものになります。 Theano の場合、このパラメータはchannels_first です。

これで、バックエンドとして Keras と TensorFlow を使用してモデルを構築する準備が整いました。

3. Kerasの基本

Keras の主なデータ構造は、完全なグラフを定義するモデルです。既存のグラフに任意のネットワーク構造を追加できます。

  1. kerasをインポートする

Keras には 2 つの異なるモデリング方法があります。

  1. シーケンシャル モデル: この方法は、いくつかの単純なモデルを実装するために使用されます。既存のモデルにレイヤーを追加するだけです。
  2. 機能 API: Keras の API は非常に強力です。これらの API を使用すると、マルチ出力モデル、有向非巡回グラフなどのより複雑なモデルを構築できます。

この記事の次のセクションでは、Keras の Sequential モデルと Functional API の理論と例について学習します。

4. Keras シーケンシャルモデル

このパートでは、Keras Sequential モデルの理論を紹介します。どのように動作するかを簡単に説明し、コードもいくつか使用して説明します。その後、単純な線形回帰問題を解き、読みながらコードを実行してアイデアを強化します。

次のコードは、シーケンス モデルのインポートと構築を開始する方法を示しています。

  1. keras.modelsからSequentialをインポートする
  2.  
  3. モデル = シーケンシャル()

次に、Dense (完全接続層)、Activation、Conv2D、MaxPooling2D 関数をモデルに追加できます。

  1. keras.layersからDense、Activation、Conv2D、MaxPooling2D、Flatten、Dropout をインポートします。
  2. モデルを追加します(Conv2D(64, (3,3), activation= 'relu' , input_shape = (100,100,32)))
  3. # これにより、 64個のフィルターを備えた畳み込み層が追加されます。  グラフサイズ3 * 3

ネットワークにクールなレイヤーを追加する方法は次のとおりです。畳み込みニューラル ネットワークのチュートリアルでは、レイヤーの説明についてすでに詳しく説明しました。

1). 畳み込み層

ここでは、64 個の畳み込みカーネルと 33 次元の畳み込み層を使用し、活性化には relu 活性化関数を使用します。入力データの次元は `100100*32` です。なお、最初の畳み込み層の場合は入力データの次元を追加する必要があり、以降のパラメータは省略できます。

  1. モデルを追加します(Conv2D(64, (3,3), activation= 'relu' , input_shape = (100,100,32)))

2). MaxPooling レイヤー

レイヤーの種類と赤のサイズを指定すると、赤の操作が自動的に完了します。すごいですね!

  1. モデルを追加します(MaxPooling2D(pool_size=(2,2)))

3). 完全接続層

このレイヤーは、Keras では Dense レイヤーと呼ばれます。出力レイヤーの次元を設定するだけで、Keras が自動的に設定してくれます。

  1. model.add (密度(256, アクティベーション= 'relu' ))

4). ドロップアウト

  1. model.add (ドロップアウト(0.5))

5). フラットレイヤー

  1. モデルを追加します(Flatten())

データ入力

ネットワークの最初の層ではトレーニング データを読み込む必要があります。したがって、入力データの次元を指定する必要があります。したがって、input_shape パラメータは、入力データの次元サイズを指定するために使用されます。

  1. モデルを追加します(Conv2D(32, (3,3), activation= 'relu' , input_shape=(224, 224, 3)))

この例では、データ入力の最初の層は畳み込み層であり、入力データのサイズは 224*224*3 です。

上記の操作は、シーケンス モデリングを使用してモデルを構築するのに役立ちます。次に、最も重要な部分を学びましょう。ネットワーク アーキテクチャを指定したら、オプティマイザーと損失関数も指定する必要があります。この機能を実現するには、Keras のコンパイル関数を使用します。たとえば、次のコードでは、オプティマイザーとして rmsprop を使用し、損失関数として binary_crossentropy を使用します。

  1. モデルをコンパイルします(損失 = 'binary_crossentropy' 、オプティマイザー = 'rmsprop' )

確率的勾配降下法を使用する場合は、適切な初期化とハイパーパラメータを選択する必要があります。

  1. keras.optimizersからSGDをインポートする
  2.  
  3. sgd = SGD(lr=0.01、減衰=1e-6、運動量=0.9、nesterov= True )
  4.  
  5. model.compile(損失= 'categorical_crossentropy' 、オプティマイザー= sgd)

これで、モデルの構築が完了しました。次に、Keras の fit 関数を使用してモデルにデータを入力してみましょう。この関数では、トレーニングする batch_size と epochs を指定することもできます。

  1. model.fit(x_train, y_train, バッチサイズ = 32、エポック = 10、検証データ(x_val, y_val))

***、evaluate 関数を使用してモデルのパフォーマンスをテストします。

  1. スコア = model.evaluate(x_test, y_test, バッチサイズ = 32)

これらは、シーケンシャル モデルを使用して Keras でニューラル ネットワークを構築する手順です。それでは、単純な線形回帰モデルを構築してみましょう。

4.1 線形回帰問題を説明するための実例

問題の説明

線形回帰の問題では、多数のデータ ポイントを取得し、これらの離散ポイントに直線を当てはめる必要があります。この例では、100 個の個別のポイントを作成し、それらに直線を当てはめました。

a) トレーニングデータを作成する

TrainX のデータ範囲は -1 ~ 1、TrainY と TrainX の関係は 3 倍で、いくつかのノイズ ポイントを追加します。

  1. kerasをインポートする
  2.  
  3. keras.modelsからSequentialをインポートする
  4.  
  5. keras.layersからDenseをインポート
  6.  
  7. numpyをnpとしてインポートする
  8.  
  9. trX = np.linspace(-1, 1, 101)
  10.  
  11. trY = 3 * trX + np.random.randn(*trX.shape) * 0.33

b) モデルを構築する

まず、シーケンス モデルを構築する必要があります。必要なのは単純な接続だけなので、Dense レイヤーを使用し、アクティベーションに線形関数を使用するだけです。

  1. モデル = シーケンシャル()
  2.  
  3. モデルを追加します(Dense(input_dim=1, output_dim=1, init= 'uniform' , activation= 'linear' ))

次のコードは、入力データ x、重み w、バイアス項 b を設定します。具体的な初期化作業を見てみましょう。次のように:

  1. 重み = model.layers[0].get_weights()
  2.  
  3. w_init = 重み[0][0][0]
  4.  
  5. b_init = 重み[1][0]
  6.  
  7. print( '線形回帰モデルは重み w: %.2f、b: %.2f で初期化されます' % (w_init、b_init))
  8.  
  9. ## 線形回帰モデル重み w: -0.03、b: 0.00初期化されます

ここで、構築したデータ trX と trY を使用してこの線形モデルをトレーニングできます。ここで、trY は trX の 3 倍です。したがって、重み w の値は 3 になります。

最適化には単純勾配降下法を使用し、損失値には平均二乗誤差 (MSE) を使用します。次のように:

  1. model.compile(オプティマイザー= 'sgd' 、損失= 'mse' )

***、fit 関数を使用してデータを入力します。

  1. モデル.fit(trX, trY, nb_epoch=200, verbose=1)

トレーニング後、重みを再度出力します。

  1. 重み = model.layers[0].get_weights()
  2.  
  3. w_final = 重み[0][0][0]
  4.  
  5. b_final = 重み[1][0]
  6.  
  7. print( '線形回帰モデルは重み w: %.2f、b: %.2f を持つようにトレーニングされています' % (w_final、b_final))
  8.  
  9. ##線形回帰モデル重み w: 2.94、b: 0.08 になるようにトレーニングされています

ご覧のとおり、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 関数を直接使用できます。

  1. model.save_weights( "my_model.h5" )

事前トレーニング済みの重みをロードする

以前にトレーニングしたモデルをロードする場合は、load_weights 関数を使用できます。

  1. モデルをロードして重み付けする( 'my_model_weights.h5' )

6. ケラスAPI

単純なモデルと問題であれば、シーケンス モデルは非常に優れたアプローチです。しかし、現実世界で複雑なネットワークを構築したい場合は、いくつかの機能 API を知っておく必要があります。多くの一般的なニューラル ネットワークでは、最小限のネットワーク構造があり、これらの最小限のモデルを重ね合わせることで完全なモデルが完成します。これらの基本 API を使用すると、レイヤーごとにモデルを構築できます。したがって、完全な複雑なニューラル ネットワークを構築するために必要なコードは非常に少なくなります。

どのように動作するか見てみましょう。まず、いくつかのパッケージをインポートする必要があります。

  1. keras.modelsからモデルをインポート

ここで、Sequential モデルではなく、最初の fit 関数で入力データを指定する必要があります。これは、シーケンス モデルとこれらの機能 API の最も重要な違いの 1 つです。 input() 関数を使用して 1*28*28 テンソルを宣言します。

  1. keras.layersから入力をインポート
  2.  
  3. ##まず、ビジョンモジュールを定義します
  4.  
  5. digit_input = 入力(形状=(1, 28, 28))

ここで、API を使用して畳み込み層を設計してみましょう。畳み込みネットワークがどの層で使用されるかを指定する必要があります。具体的なコードは次のとおりです。

  1. x = Conv2D(64, (3, 3))(数字入力)
  2.  
  3. x = 2D(64, (3, 3))(x) の等式は、
  4.  
  5. x = MaxPooling2D((2, 2))(x)
  6.  
  7. 出力= フラット化()(x)

***、指定された入力データと出力データのモデルを構築します。

  1. vision_model = モデル(digit_input, out )

もちろん、損失関数やオプティマイザーなども指定する必要があります。ただし、これらはシーケンス モデルで実行した操作と同じであり、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 アーキテクチャ

このモデルを完全に実装するために別の関数を記述してみましょう。

  1. img_input = 入力(shape=input_shape)
  2. # ブロック 1
  3. x = Conv2D(64, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block1_conv1' )(img_input)
  4. x = Conv2D(64, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block1_conv2' )(x)
  5. x = MaxPooling2D((2, 2)、ストライド=(2, 2)、名前= 'block1_pool' )(x)
  6.  
  7. # ブロック 2
  8. x = Conv2D(128, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block2_conv1' )(x)
  9. x = Conv2D(128, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block2_conv2' )(x)
  10. x = MaxPooling2D((2, 2)、ストライド=(2, 2)、名前= 'block2_pool' )(x)
  11.  
  12. # ブロック 3
  13. x = Conv2D(256, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block3_conv1' )(x)
  14. x = Conv2D(256, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block3_conv2' )(x)
  15. x = Conv2D(256, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block3_conv3' )(x)
  16. x = MaxPooling2D((2, 2)、ストライド=(2, 2)、名前= 'block3_pool' )(x)
  17.  
  18. # ブロック 4
  19. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block4_conv1' )(x)
  20. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block4_conv2' )(x)
  21. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block4_conv3' )(x)
  22. x = MaxPooling2D((2, 2)、ストライド=(2, 2)、名前= 'block4_pool' )(x)
  23.  
  24. # ブロック 5
  25. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block5_conv1' )(x)
  26. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block5_conv2' )(x)
  27. x = Conv2D(512, (3, 3), アクティベーション= 'relu' 、パディング= 'same' 名前= 'block5_conv3' )(x)
  28. x = MaxPooling2D((2, 2)、ストライド=(2, 2)、名前= 'block5_pool' )(x)
  29.  
  30. x = フラット化(名前= 'フラット化' )(x)
  31. x = Dense(4096、アクティベーション= 'relu' 名前= 'fc1' )(x)
  32. x = Dense(4096、アクティベーション= 'relu' 名前= 'fc2' )(x)
  33. x = Dense(クラス、活性化 = 'softmax' 名前= '予測' )(x)

この完成したモデルに vgg16.py という名前を付けることができます。

この例では、テストのために imageNet データセットからいくつかのデータを実行します。具体的なコードは次のとおりです。

  1. モデル = applications.VGG16(重み = 'imagenet' )
  2. img = image.load_img( 'cat.jpeg' , target_size=(224, 224))
  3. x = image.img_to_array(画像)
  4. x = np.expand_dims(x, 軸=0)
  5. x = 前処理入力(x)
  6. 予測 = モデル.予測(x)
  7. decode_predictions(preds)結果の場合:
  8. 結果結果として:
  9. print( '確率 %0.2f%% => [%s]' % (100*result[2], result[1]))

[[193127]]

画像からわかるように、モデルは画像内のオブジェクトの識別予測を行います。

API を通じて VGG モデルを構築しましたが、VGG は非常にシンプルなモデルであるため、API の機能を十分に開発できませんでした。次に、API の真の機能を実証するために SqueezeNet モデルを構築します。

6.2 Keras APIを使用してSqueezeNet畳み込みニューラルネットワークを構築して実行する

SequeezeNet は注目すべきネットワーク アーキテクチャです。その注目すべき特徴は、正確性をどれだけ向上させるかではなく、計算量をどれだけ削減するかです。 SequeezeNet の正確さは AlexNet に近いですが、ImageNet の事前トレーニング済みモデルのストレージ サイズは 5 MB 未満であり、これは実際の世界で CNN を使用するのに非常に有益です。 SqueezeNet モデルは、交互に配置される Squeeze モジュールと Expand モジュールで構成される Fire モデルを導入します。

SqueezeNet 火災モジュール

ここで、次のように、火災モデルを複数回複製して完全なネットワーク モデルを構築します。

このネットワークを構築するには、まず API を使用して別の火災モジュールを構築します。

  1. # 1 * 1畳み込み火モジュール一部を圧縮し、その後Reluを実行します
  2. x = Convolution2D(squeeze, (1, 1), パディング= 'valid' 名前= 'fire2/squeeze1x1' )(x)
  3. x = アクティベーション( 'relu' 名前= 'fire2/relu_squeeze1x1' )(x)
  4.  
  5. #展開部分には2つの部分があり、左側は1 * 1畳み込みを使用し   expand1x1 と呼ばれます
  6. = Convolution2D(expand, (1, 1), パディング = 'valid' 名前= 'fire2/expand1x1' )(x)
  7. left = アクティベーション( 'relu' name = 'fire2/relu_expand1x1' )( left )
  8.  
  9. #右側の部分は3 * 3の畳み込みを使用し   expand3x3呼ばれ、これら両方ともRelu レイヤー続きます。両方とも設計どおりにx を入力として受け取ることに注意してください
  10. = Convolution2D(expand, (3, 3), パディング = 'same' 名前= 'fire2/expand3x3' )(x)
  11. right = アクティベーション( 'relu' name = 'fire2/relu_expand3x3' )( right )
  12.  
  13. # 最終出力 ファイアモジュール   そして そうです
  14. x = 連結([,], 軸=3,名前= 'fire2/concat' )

このコードを再利用するには、関数に変換します。

  1. sq1x1 = "スクイーズ1x1"  
  2. exp1x1 = "expand1x1"  
  3. exp3x3 = "expand3x3"  
  4. relu = "relu_"  
  5. WEIGHTS_PATH = "https://github.com/rcmalli/keras-squeezenet/releases/download/v1.0/squeezenet_weights_tf_dim_ordering_tf_kernels.h5"  

モジュール処理

  1. sq1x1 = "スクイーズ1x1"  
  2. exp1x1 = "expand1x1"  
  3. exp3x3 = "expand3x3"  
  4. relu = "relu_"  
  5.  
  6. def fire_module(x, fire_id, squeeze=16, expand=64):
  7. s_id = 'fire' + str(fire_id) + '/'  
  8. x = Convolution2D(squeeze, (1, 1), パディング= 'valid' ,名前=s_id+sq1x1)(x)
  9. x = アクティベーション( 'relu' 名前=s_id + relu + sq1x1)(x)
  10.  
  11. = Convolution2D(expand, (1, 1), パディング = 'valid' ,名前=s_id+exp1x1)(x)
  12. left = アクティベーション( 'relu' name =s_id + relu + exp1x1)( left )
  13.  
  14. = Convolution2D(expand, (3, 3), パディング= 'same' ,名前=s_id+exp3x3)(x)
  15. right = アクティベーション( 'relu' name =s_id + relu + exp3x3)( right )
  16.  
  17. x = 連結([,], 軸=3,名前=s_id + 'concat' )

これで、構築した個別の火災モジュールを使用して完全なモデルを構築できます。

  1. x = Convolution2D(64, (3, 3), ストライド=(2, 2), パディング= 'valid' ,名前= 'conv1' )(img_input)
  2. x = アクティベーション( 'relu' 名前= 'relu_conv1' )(x)
  3. x = MaxPooling2D(プールサイズ=(3, 3)、ストライド=(2, 2)、名前= 'pool1' )(x)
  4.  
  5. x = fire_module(x, fire_id=2, squeeze=16, expand=64)
  6. x = fire_module(x, fire_id=3, squeeze=16, expand=64)
  7. x = MaxPooling2D(プールサイズ=(3, 3)、ストライド=(2, 2)、名前= 'pool3' )(x)
  8.  
  9. x = fire_module(x, fire_id=4, squeeze=32, expand=128)
  10. x = fire_module(x, fire_id=5, squeeze=32, expand=128)
  11. x = MaxPooling2D(プールサイズ=(3, 3)、ストライド=(2, 2)、名前= 'pool5' )(x)
  12.  
  13. x = fire_module(x, fire_id=6, squeeze=48, expand=192)
  14. x = fire_module(x, fire_id=7, squeeze=48, expand=192)
  15. x = fire_module(x, fire_id=8, squeeze=64, expand=256)
  16. x = fire_module(x, fire_id=9, squeeze=64, expand=256)
  17. x = ドロップアウト(0.5,名前= 'drop9' )(x)
  18.  
  19. x = Convolution2D(クラス、(1, 1)、パディング= 'valid' 名前= 'conv10' )(x)
  20. x = アクティベーション( 'relu' 名前= 'relu_conv10' )(x)
  21. x = グローバル平均プーリング2D()(x)
  22. out = アクティベーション( 'softmax' name = 'loss' )(x)
  23.  
  24. モデル = Model(入力、出力名前= 'squeezenet' )

完全なネットワーク モデルは squeezenet.py ファイルに配置されます。まず、imageNet の事前トレーニング済みモデルをダウンロードし、独自のデータセットでトレーニングしてテストする必要があります。次のコードはこの機能を実装します。

  1. numpyをnpとしてインポートする
  2. keras_squeezenetからSqueezeNet をインポートします
  3. keras.applications.imagenet_utilsからpreprocess_input、decode_predictions をインポートします
  4. keras.preprocessingから画像をインポート
  5.  
  6. モデル = SqueezeNet()
  7.  
  8. img = image.load_img( 'pexels-photo-280207.jpeg' 、 target_size=(227, 227)) です。
  9. x = image.img_to_array(画像)
  10. x = np.expand_dims(x, 軸=0)
  11. x = 前処理入力(x)
  12.  
  13. 予測 = モデル.予測(x)
  14. all_results = decode_predictions(予測)
  15. all_results結果の場合:
  16. 結果結果として:
  17. print( '確率 %0.2f%% => [%s]' % (100*result[2], result[1]))

同じ画像予測に対して、次の予測確率を得ることができます。

[[193128]]

これで Keras TensorFlow チュートリアルは終了です。これが役に立つことを願っています。

<<:  JD.com JDataアルゴリズムコンテスト決勝戦が無事終了、優勝賞金30万人民元は「魯班第7号」に

>>:  スマートコミュニティはどれくらい「スマート」なのでしょうか?知能の背後にある技術的応用を解釈する

ブログ    
ブログ    
ブログ    

推薦する

...

2020 年の AI と分析の 5 つの災害

今日の新しいテクノロジーの進歩により、私たちは皆、データの重要性を認識しています。データは新たな石油...

人工知能は医療現場の診断や治療の決定に役立つ

必要な変更。医療制度と支払者(政府と民間の両方)において、この用語は患者への不必要なリスク、医療の質...

...

学問に戻りましょう!シュム氏は清華大学の非常勤教授として、コンピュータビジョンとグラフィックスの博士課程の学生を募集する。

[[317132]]出典:中国ビジネスニュースマイクロソフトの元副社長、ハリー・シャム博士が学界復...

2021 年に注目すべき 27 の建設技術トレンド (パート 3)

テクノロジーは建設業界にかつてないほど大きな影響を与えています。クラウドベースのコラボレーションやデ...

モデル、データ、フレームワークの観点から、効率的な大規模言語モデルに関する54ページのレビューを紹介します。

大規模言語モデル (LLM) は、自然言語理解、言語生成、複雑な推論など、多くの重要なタスクにおいて...

一貫性のあるハッシュアルゴリズムとJava実装

コンシステント ハッシュ アルゴリズムは、1997 年にマサチューセッツ工科大学によって提案された分...

...

通信会社は AI と機械学習をどのように活用して利益率を向上させることができるでしょうか?

過去 10 年間で世界中のスマートフォン ユーザーの数は急増しており、今後も同様の増加傾向が続くと思...

2021年のAI展望

人工知能は進歩し続け、企業の運営方法や私たち自身の日常の経験を変えています。実際、AI はほぼすべて...

アルゴリズムの改善とハードウェアの反復、どちらがより収益性が高いでしょうか? MITの最新の研究結果がこの答えを提供している

コンピューターが登場する前には、アルゴリズムがありました。コンピュータの誕生により、コンピュータの強...

...

...

...