Kerasを使用したディープラーニング:Kerasを使用したニューラルネットワークのトレーニング[コードを使用]
公開: 2020-12-24Kerasは、ニューラルネットワークとディープラーニングフレームワークを操作するためのAPIを提供するPythonライブラリです。 Kerasは、Pythonでさまざまなディープラーニングアプリケーションを処理するときに非常に便利な関数とモジュールを提供します。
このチュートリアルを終了するまでに、次の知識が身に付きます。
- Kerasとは何ですか?
- Keras API
- Kerasでニューラルネットワークをトレーニングする
目次
Kerasとは何ですか?
ディープラーニングを行うために、以前に最も使用されたライブラリは、初心者にとって扱いにくいTensorflow1.xでした。 基本的な1層ネットワークを作成するには、多くのコーディングが必要でした。 しかし、Kerasを使用すると、ニューラルネットワークの構造を作成し、それをトレーニングおよび追跡する完全なプロセスが非常に簡単になりました。
Kerasは、Tensorflow、Theano、CNTKバックエンドで実行できる高レベルのAPIです。 これにより、高レベルでユーザーフレンドリーなAPIを使用してニューラルネットワークを使用して実験を実行できるようになります。 また、CPUおよびGPUで実行することもできます。
Keras API
Kerasには、ニューラルネットワークのモデリングとトレーニングを処理するための10種類のAPIモジュールがあります。 それらのそれぞれを調べて、すべてのKerasが提供するものを理解しましょう。
モデル
Models APIは、レイヤーを追加/削除することで複雑なニューラルネットワークを構築する機能を提供します。 モデルはシーケンシャルにすることができます。つまり、レイヤーは単一の入力と出力でシーケンシャルにスタックされます。 モデルは、完全にカスタマイズ可能なモデルを使用して、機能的、つまり機能的にすることもできます。 これは、主に業界で使用されているものです。

APIには、オプティマイザーと損失関数とともにモデルをコンパイルするメソッド、モデルを適合させるメソッド、新しいデータを評価および予測するメソッドを提供するトレーニングモジュールもあります。 さらに、バッチデータのトレーニング、テスト、および予測の方法もあります。 Models APIには、モデルの保存とシリアル化もあります。
レイヤー
レイヤーは、あらゆるニューラルネットワークの構成要素です。 Layers APIは、ニューラルネットアーキテクチャを構築するための完全なメソッドセットを提供します。 Layers APIには、カスタムの重みと初期化子を使用してカスタムレイヤーを構築するために必要なメソッドを含むBaseLayerクラスがあります。
これには、ReLU、Sigmoid、Tanh、Softmaxなどのさまざまなアクティベーション関数で構成されるLayer Activationsクラスが含まれています。LayerWeightInitializersクラスは、さまざまな方法を使用してウェイトを初期化するメソッドを提供します。
また、Dense Layer、Activation Layer、Embeddinglayerなどのコアレイヤーを追加するために必要なクラスで構成されるCoreLayersクラスで構成されています。ConvolutionLayerクラスは、さまざまなタイプのConvolutionレイヤーを追加するためのさまざまなメソッドを提供します。 Pooling Layersクラスには、Max Pooling、Average Pooling、Global Max Pooling、GlobalAveragePoolingなどのさまざまなタイプのプーリングに必要なメソッドが含まれています。
コールバック
コールバックは、モデルのトレーニングプロセスを追跡する方法です。 コールバックを有効にすると、エポックまたはバッチの終了前または終了後にさまざまなアクションを実行できます。 コールバックを使用すると、次のことができます。
- TensorFlow Boardに指標を記録して、トレーニング指標を監視します
- モデルを定期的にディスクに保存する
- 特定のエポックの後で損失が大幅に減少していない場合の早期停止
- トレーニング中のモデルの内部状態と統計を表示する
データセットの前処理
データは通常生の形式であり、配置されたディレクトリにあり、フィッティングのためにモデルにフィードする前に前処理する必要があります。 画像データ前処理クラスには、このような専用の機能が多数あります。 たとえば、画像データは、img_to_array関数を使用できる数値配列に含まれている必要があります。 または、画像がディレクトリとサブフォルダ内に存在する場合は、image_dataset_from_directory関数を使用できます。
データ前処理APIには、時系列データとテキストデータのクラスもあります。
オプティマイザー
オプティマイザーは、あらゆるニューラルネットワークのバックボーンです。 すべてのニューラルネットワークは、損失関数を最適化して、予測に最適な重みを見つけるように機能します。 最適な重みを見つけるためにわずかに異なる手法に従う複数の種類のオプティマイザがあります。 これらのオプティマイザーはすべて、オプティマイザーAPI(SGD、RMSProp、Adam、Adadelta、Adagrad、Adamax、Nadal、FTRL)で使用できます。
損失
モデルをコンパイルするときは、損失関数を指定する必要があります。 この損失関数は、コンパイルメソッドのパラメーターとしても渡されたオプティマイザーによって最適化されます。 3つの主要な損失クラスは、確率的損失、回帰損失、ヒンジ損失です。
指標
メトリックは、すべてのMLモデルで使用され、テストデータでのパフォーマンスを定量化します。 メトリックは、テストデータで使用されることを除いて、損失関数に似ています。 Accuracy、Binary Accuracy、Categorical Accuracyなど、利用可能な多くのAccuracyメトリックがあります。また、Binary Cross Entropy、Categorical CrossEntropyなどの確率的メトリックも含まれています。AUCなどの誤検知/ネガティブをチェックするためのメトリックもあります。精度、リコールなど。
これらの分類メトリックとは別に、平均二乗誤差、二乗平均平方根誤差、平均絶対誤差などの回帰メトリックもあります。
また読む: KerasとTensorFlowの内容
Kerasアプリケーション
Keras Applicationsクラスは、事前にトレーニングされたウェイトとともに、いくつかの事前に構築されたモデルで構成されています。 これらの事前トレーニング済みモデルは、転移学習のプロセスに使用されます。 これらの事前トレーニング済みモデルは、アーキテクチャ、レイヤー数、トレーニング可能なウェイトなどによって異なります。Xception、VGG16、Resnet50、MobileNetなどがあります。
Kerasを使用したニューラルネットワークのトレーニング
Kerasのdatasetsクラスで利用できるMNISTなどの単純なデータセットについて考えてみましょう。 0〜9の数字の手書き画像を分類するための単純なシーケンシャル畳み込みニューラルネットワークを作成します。

#データセットの読み込み keras.datasetsからインポートmnist (x_train、y_train)、(x_test、y_test)= mnist.load_data() |
各ピクセルを255で除算してデータセットを正規化します。また、CNNモデルにフィードする前に、画像を4次元に変換する必要があります。
x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) x_train / = 255 x_test / = 255 x_train = X_train.reshape ( X_train.shape [ 0 ] 、 28、28、1 ) x_test = X_test.reshape ( X_test.shape [ 0 ] 、 28、28、1 ) |
モデルにフィードする前に、クラスにラベルを付ける必要があります。 これを行うには、KerasのUtilsクラスを使用します。
keras.utilsからimportto_categorical _
|
これで、SequentialAPIを使用してモデルの作成を開始できます。
keras.modelsからインポートシーケンシャル from keras.layers import Conv2D、MaxPool2D、Dense、Flatten、Dropout model = Sequential() model.add(Conv2D(filters = 32 、kernel_size =(5、5 ) 、 activation = ' relu ' 、input_shape = x_train.shape [ 1 :])) model.add(MaxPool2D(pool_size =( 2、2 ) ) ) model.add(Dropout(rate = 0.25 )) model.add(Conv2D(filters = 64 、kernel_size =( 3、3 ) 、 activation = 'relu' ) ) model.add(MaxPool2D(pool_size =( 2、2 ) ) ) model.add(Dropout(rate = 0.25 )) model.add(Flatten()) model.add(Dense( 256 、activation = 'relu' )) model.add(Dropout(rate = 0.5 )) model.add(Dense( 10 、activation = 'softmax' )) |
上記のコードでは、シーケンシャルモデルを宣言してから、複数のレイヤーを追加します。 畳み込み層、次に最大プーリング層、そして正則化のためのドロップアウト層が続きます。 後で、フラット化レイヤーを使用して出力をフラット化します。最後のレイヤーは、10ノードの完全に接続された高密度レイヤーです。
次に、損失関数、オプティマイザー、およびメトリックを渡してコンパイルする必要があります。
model.compile( loss = 'categorical_crossentropy' 、 オプティマイザー= 'adam' 、 メトリック=[ '精度' ] )。 |
次に、元の画像から拡張画像を追加して、モデルのトレーニングセットと精度を向上させる必要があります。 これは、ImageDataGenerator関数を使用して行います。
keras.preprocessing.imageからインポートImageDataGenerator datagen = ImageDataGenerator( rotation_range = 10 、 Zoom_range = 0.1 、 width_shift_range = 0.1 、 height_shift_range = 0.1 )。 |
モデルがコンパイルされ、画像が拡張されたので、トレーニングプロセスを開始できます。 上記の画像データジェネレーターを使用したので、単にフィットするのではなく、fit_generatorメソッドを使用します。

エポック= 3 batch_size = 32 history = model.fit_generator( datagen.flow(x_train、y_train、batch_size = batch_size)、epochs = epichs、 validate_data =(x_test、y_test)、 steps_per_epoch = x_train.shape [ 0 ] // batch_size ) |
トレーニングプロセスの出力は次のとおりです。
3これでモデルがトレーニングされ、見えないテストデータで実行して評価できるようになりました。
関連記事: Kerasを使用したディープラーニングとニューラルネットワーク
行く前に
このチュートリアルでは、Kerasがいかに適切に構造化され、複雑なニューラルネットワークを簡単に構築できるかを確認しました。 KerasはTensorflow2.xでラップされるようになり、さらに多くの機能が提供されます。 そのような例をもっと試して、Kerasの機能と特徴を調べてください。
機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題、IIIT-を提供します。 B卒業生のステータス、5つ以上の実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。