Kerasとは何ですか?ディープニューラルネットワークAPIの説明
ディープニューラルネットワークは大流行していますが、主要なフレームワークの複雑さは、機械学習に不慣れな開発者がそれらを使用する際の障壁となっています。ニューラルネットワークモデルを構築するための改善され簡素化された高レベルAPIについていくつかの提案がありました。これらはすべて、遠くから見ると似ている傾向がありますが、詳しく調べると違いが見られます。
Kerasは、主要な高レベルニューラルネットワークAPIの1つです。Pythonで記述されており、複数のバックエンドニューラルネットワーク計算エンジンをサポートしています。
KerasとTensorFlow
TensorFlowプロジェクトは、今後TensorFlow 2.0リリースのための高レベルAPIとしてKerasを採用していることを考えると、Kerasはになりそうでない場合は、必ずしも、勝者の勝者。この記事では、Kerasの原理と実装について説明し、低レベルのディープラーニングAPIよりも優れている理由を理解することを目的としています。
TensorFlow 1.12でも、公式のGet Started with TensorFlowチュートリアルでは、TensorFlowに埋め込まれた高レベルのKeras API、tf.kerasを使用しています。対照的に、TensorFlow Core APIでは、TensorFlowの計算グラフ、テンソル、操作、セッションを操作する必要があります。これらの一部は、TensorFlowを使い始めたばかりの場合は理解しにくい場合があります。主にデバッグ時に低レベルのTensorFlowCore APIを使用することにはいくつかの利点がありますが、幸いなことに、必要に応じて高レベルと低レベルのTensorFlowAPIを混在させることができます。
Kerasの原則
Kerasは、ユーザーフレンドリーで、モジュール式で、拡張が簡単で、Pythonで動作するように作成されました。APIは「機械ではなく人間のために設計された」ものであり、「認知的負荷を軽減するためのベストプラクティスに従います」。
ニューラルレイヤー、コスト関数、オプティマイザー、初期化スキーム、活性化関数、および正則化スキームはすべて、新しいモデルを作成するために組み合わせることができるスタンドアロンモジュールです。新しいモジュールは、新しいクラスや関数として簡単に追加できます。モデルはPythonコードで定義されており、個別のモデル構成ファイルではありません。
なぜケラス?
Kerasを使用する最大の理由は、その指針となる原則、主にユーザーフレンドリーであることに関するものに由来します。Kerasは、学習のしやすさとモデル構築のしやすさを超えて、幅広い採用、幅広い本番展開オプションのサポート、少なくとも5つのバックエンドエンジン(TensorFlow、CNTK、Theano、MXNet、PlaidML)との統合という利点を提供します。複数のGPUと分散トレーニングの強力なサポート。さらに、Kerasは、Google、Microsoft、Amazon、Apple、Nvidia、Uberなどの支援を受けています。
Kerasバックエンド
Kerasは、テンソル積や畳み込みなど、独自の低レベルの操作を行いません。そのためにバックエンドエンジンに依存しています。Kerasは複数のバックエンドエンジンをサポートしていますが、そのプライマリ(およびデフォルト)バックエンドはTensorFlowであり、そのプライマリサポーターはGoogleです。Keras APIはTensorFlowにとしてパッケージ化されておりtf.keras
、前述のように、TensorFlow2.0以降でプライマリTensorFlowAPIになります。
バックエンドを変更するには、$HOME/.keras/keras.json
ファイルを編集して、theano
またはなどの別のバックエンド名を指定するだけCNTK
です。または、KERAS_BACKEND
シェルまたはos.environ["KERAS_BACKEND"]
プロパティを使用してPythonコードで環境変数を定義することにより、構成されたバックエンドをオーバーライドできます。
Kerasモデル
モデルは、コアKerasデータ構造です。Kerasで利用できるモデルには主に2つのタイプがあります。Sequential
モデルModel
と、機能APIで使用されるクラスです。
Kerasシーケンシャルモデル
Sequential
モデルは、層の線形スタックであり、層は非常に簡単に記述することができます。モデルmodel.add()
内の2つの密なレイヤーを定義するために使用するKerasドキュメントの例を次に示しますSequential
。
ケラスをインポートするkeras.modelsからインポートシーケンシャル
keras.layersからインポート高密度
#addメソッドを使用して、密なレイヤーでシーケンシャルモデルを作成します
#Denseは次の操作を実装します。
#出力=アクティベーション(ドット(入力、カーネル)+バイアス)
#Unitsは、レイヤーの出力スペースの次元です。
#隠しユニットの数に等しい
#アクティベーション関数と損失関数は、文字列またはクラスで指定できます
model.add(Dense(units = 10、activation = "softmax"))
#compileメソッドはモデルの学習プロセスを構成します
オプティマイザー= "sgd"、
メトリック= ['精度'])
#fitメソッドはバッチでトレーニングを行います
#x_trainとy_trainは、Scikit-LearnAPIと同じようにNumpy配列です。
#evaluateメソッドは損失とメトリックを計算します
#訓練されたモデルの場合
#predictメソッドは、トレーニングされたモデルを入力に適用します
#出力を生成する
クラス= model.predict(x_test、batch_size = 128)
上記のコードのコメントは読む価値があります。また、たとえば低レベルのTensorFlow APIと比較して、実際のコードにはごちゃごちゃが少ないことにも注目してください。各レイヤー定義には1行のコードが必要であり、コンパイル(学習プロセス定義)には1行のコードが必要であり、フィッティング(トレーニング)、評価(損失とメトリックの計算)、およびトレーニング済みモデルからの出力の予測には、それぞれ1行のコードが必要です。 。
Keras機能API
Keras Sequentialモデルは単純ですが、モデルトポロジが制限されています。Keras機能APIは、マルチ入力/マルチ出力モデル、有向非巡回グラフ(DAG)、共有レイヤーを持つモデルなどの複雑なモデルを作成するのに役立ちます。
機能APIは、シーケンシャルモデルと同じレイヤーを使用しますが、それらを組み合わせる際の柔軟性を高めます。機能APIでは、最初にレイヤーを定義してから、モデルを作成してコンパイルし、フィット(トレーニング)します。評価と予測は基本的にシーケンシャルモデルと同じであるため、以下のサンプルコードでは省略されています。
keras.layersからimportInput、Densekeras.modelsからモデルをインポート
#これはテンソルを返します
#レイヤーインスタンスはテンソルで呼び出し可能であり、テンソルを返します
x = Dense(64、activation = "relu")(x)
予測= Dense(10、activation = "softmax")(x)
#これにより、以下を含むモデルが作成されます
#入力レイヤーと3つの高密度レイヤー
model.compile(optimizer = 'rmsprop'、
loss = "categorical_crossentropy"、
メトリック= ['精度'])
model.fit(data、labels) #トレーニングを開始します
Kerasレイヤー
前の例では、Dense
レイヤーのみを使用しました。Kerasには、事前定義されたレイヤータイプの幅広い選択肢があり、独自のレイヤーの作成もサポートしています。
コアレイヤーには、Dense
(内積とバイアス)、Activation
(伝達関数またはニューロンの形状)、Dropout
(過剰適合を回避するために、トレーニングの更新ごとに入力単位の一部をランダムに0に設定)、Lambda
(任意の式をLayer
オブジェクトとしてラップ)、およびその他のいくつかが含まれます。 。畳み込みレイヤー(フィルターを使用してフィーチャマップを作成する)は1Dから3Dまで実行され、各次元のトリミングや転置畳み込みレイヤーなど、最も一般的なバリアントが含まれます。視覚野の機能に触発された2D畳み込みは、画像認識に一般的に使用されます。
プーリング(ダウンスケーリング)レイヤーは1Dから3Dまで実行され、最大プーリングや平均プーリングなどの最も一般的なバリアントが含まれます。ローカルに接続されたレイヤーは、重みが共有されていないことを除いて、畳み込みレイヤーのように機能します。反復層には、単純(完全に接続された反復)、ゲート、LSTMなどが含まれます。これらは、他のアプリケーションの中でも、言語処理に役立ちます。ノイズレイヤーは、過剰適合を回避するのに役立ちます。
Kerasデータセット
Kerasは、keras.datasets
クラスを介して7つの一般的な深層学習サンプルデータセットを提供します。これには、cifar10とcifar100の小さなカラー画像、IMDBの映画レビュー、ロイターのニュースワイヤートピック、MNISTの手書きの数字、MNISTのファッション画像、ボストンの住宅価格が含まれます。
Kerasのアプリケーションと例
Kerasは、ImageNetに対して事前トレーニングされたKerasアプリケーションと呼ばれる10のよく知られたモデル(Xception、VGG16、VGG19、ResNet50、InceptionV3、InceptionResNetV2、MobileNet、DenseNet、NASNet、MobileNetV2TK)も提供しています。これらを使用して、画像の分類を予測し、画像から特徴を抽出し、さまざまなクラスのセットでモデルを微調整できます。
ちなみに、既存のモデルを微調整することは、トレーニングをスピードアップするための良い方法です。たとえば、必要に応じてレイヤーを追加し、ベースレイヤーをフリーズして新しいレイヤーをトレーニングしてから、一部のベースレイヤーのフリーズを解除してトレーニングを微調整できます。を設定すると、レイヤーをフリーズできますlayer.trainable = False
。
Kerasサンプルリポジトリには、40を超えるサンプルモデルが含まれています。それらは、ビジョンモデル、テキストとシーケンス、および生成モデルをカバーしています。
Kerasのデプロイ
Kerasモデルは、おそらく他のどのディープラーニングフレームワークよりも多く、幅広いプラットフォームにデプロイできます。これには、CoreML(Appleがサポート)を介したiOSが含まれます。Android、TensorFlowAndroidランタイム経由。ブラウザで、Keras.jsとWebDNNを介して; Google Cloudで、TensorFlow-Servingを介して; PythonWebアプリのバックエンド。JVMで、DL4Jモデルのインポートを介して。とラズベリーパイ。
Kerasの使用を開始するには、ドキュメントを読み、コードリポジトリを確認し、TensorFlow(または別のバックエンドエンジン)とKerasをインストールして、KerasSequentialモデルの入門チュートリアルを試してください。そこから他のチュートリアルに進み、最終的にKerasの例を調べることができます。