Main Content

MATLAB による深層学習モデルの学習

さまざまな方法で深層学習モデルの学習とカスタマイズを行うことができます。たとえば、新しいデータを使用して事前学習済みのモデルに再学習させたり (転移学習)、ネットワークにゼロから学習させたり、深層学習モデルを関数として定義してカスタム学習ループを使用したりすることができます。このフロー チャートを使用して、自分のタスクに最適な学習手法を選択できます。

Flowchart showing decision process of training methods.

ヒント

オブジェクト検出用などのコンピューター ビジョンのワークフローに関する詳細については、コンピューター ビジョンを参照してください。TensorFlow™-Keras、Caffe、および ONNX™ (Open Neural Network Exchange) モデル形式からネットワークやネットワーク アーキテクチャをインポートする方法の詳細については、外部のプラットフォームからの事前学習済みのネットワークを参照してください。

学習手法

次の表に、さまざまな学習手法の詳細を示します。

手法詳細
ネットワークを直接使用する

必要なタスクが事前学習済みのネットワークによって既に実行されている場合、そのネットワークに再学習させる必要はありません。代わりに、関数 minibatchpredict および predict を使用してネットワークによる予測を直接行うことができます。分類スコアをラベルに変換するには、関数 scores2label を使用します。

例については、GoogLeNet を使用したイメージの分類を参照してください。

trainet を使用したネットワークの学習

層配列または dlnetwork オブジェクトとしてネットワークが指定されており、必要なオプションが関数 trainingOptions ですべて用意されている場合、関数 trainnet を使用してネットワークに学習させることができます。

ネットワークの再学習 (転移学習) を行う方法を示す例については、Retrain Neural Network to Classify New Imagesを参照してください。ネットワークにゼロから学習させる方法を示す例については、分類用のシンプルな深層学習ニューラル ネットワークの作成を参照してください。

カスタム学習ループを使用したネットワークの学習

ほとんどのタスクでは、関数 trainingOptions と関数 trainnet を使用して学習アルゴリズムの詳細を制御できます。タスク (たとえば、カスタム学習率スケジュール) に必要なオプションが関数 trainingOptions に用意されていない場合、自分でカスタム学習ループを定義できます。

関数ハンドルを使用して指定できない損失関数、または層のネットワークとして指定できないモデルの場合は、カスタム学習ループを使用してモデルに学習させることができます。

カスタム学習率スケジュールでネットワークに学習させる方法を示す例については、カスタム学習ループを使用したネットワークの学習を参照してください。

層のネットワークとして指定できないモデルの場合は、モデルを関数として定義できます。関数として定義される深層学習モデルの学習を行う方法を示す例については、モデル関数を使用したネットワークの学習を参照してください。

詳細については、カスタム学習ループ、損失関数、およびネットワークの定義を参照してください。

判定

次の表に、フロー チャート内の各判定に関する詳細を示します。

判定詳細
適切な事前学習済みのネットワークがソフトウェアによって提供されるか

ほとんどのタスクにおいて、SqueezeNet などの事前学習済みのネットワークを使用したりネットワークに再学習させたりできます。

MATLAB® の事前学習済みの深層学習ネットワークの一覧については、事前学習済みの深層ニューラル ネットワークを参照してください。事前学習済みのネットワークは、新しいデータを使って直接使用するか、別のタスクで使用できるように新しいデータを使用して再学習 (転移学習) させることができます。

再学習せずにネットワークを使用できるか

必要なタスクが事前学習済みのネットワークによって既に実行されている場合、再学習させることなくそのネットワークを直接使用できます。たとえば、事前学習済みの SqueezeNet ニューラル ネットワークを使用して、イメージを 1000 個のクラスに分類できます。事前学習済みの SqueezeNet ニューラル ネットワークを読み込むには、imagePretrainedNetwork を使用します。ネットワークによる予測を直接行うには、関数 minibatchpredict または predict を使用してから、関数 scores2label を使用します。例については、GoogLeNet を使用したイメージの分類を参照してください。

ネットワークに再学習させる必要がある場合 (異なるクラスのセットに分類する場合など)、転移学習を使用してネットワークに再学習させることができます。例については、Retrain Neural Network to Classify New Imagesを参照してください。

モデルを層配列または層のネットワークとして定義できるか

ほとんどの深層学習モデルは、層配列または層のネットワークとして指定できます。すなわち、層の出力が他の層の入力に接続された層の集合としてモデルを定義できます。

一部のモデルはニューラル ネットワークとして定義することができません。たとえば、ツイン ネットワークは重みを共有する必要があり、ニューラル ネットワークとして定義できません。そのようなモデルでは、モデルを関数として定義しなければなりません。例については、モデル関数を使用したネットワークの学習を参照してください。

必要な層がソフトウェアによって提供されるか

Deep Learning Toolbox™ には、深層学習タスク用の層が数多く用意されています。層の一覧については、深層学習層の一覧を参照してください。

必要な層がソフトウェアによって提供される場合は、それらの層を、その配列またはニューラル ネットワークとして定義できます。そうでない場合は、サポートされていない層をカスタム層として定義してみてください。詳細については、カスタム深層学習層の定義を参照してください。

サポートされていない層をカスタム層として定義できるか

必要な層がソフトウェアによって提供されない場合、カスタム深層学習層の定義を試すことができます。詳細については、カスタム深層学習層の定義を参照してください。

サポートされていない層をカスタム層として定義できる場合、これらのカスタム層を層配列またはニューラル ネットワークに含めることができます。そうでない場合は、関数を使用して深層学習モデルを指定し、カスタム学習ループを使用してモデルに学習させます。例については、モデル関数を使用したネットワークの学習を参照してください。

必要な損失関数が関数 trainnet によって提供されるか

関数 trainnet は、深層学習タスクにさまざまな損失関数を提供します。たとえば、"crossentropy""mse" のようにします。詳細については、関数 trainnet の損失関数引数を参照してください。

必要な損失関数が関数 trainnet によって提供されない場合は、損失関数を関数ハンドルとして定義するか、カスタム学習ループを使用してモデルに学習させることを試します。

損失関数を関数ハンドルとして定義できるか

必要な損失関数が関数 trainnet によって提供されない場合は、カスタム損失関数を関数ハンドルとして定義してみることができます。詳細については、関数 trainnet の損失関数引数を参照してください。

損失関数を関数ハンドルとして定義できる場合は、これを関数 trainnet の損失関数として使用できます。そうでない場合は、dlnetwork オブジェクトとカスタム学習ループを使用してモデルに学習させます。例については、カスタム学習ループを使用したネットワークの学習を参照してください。

必要なオプションが関数 trainingOptions に用意されているか

関数 trainingOptions には、学習プロセスをカスタマイズするための数多くのオプションが用意されています。学習に必要なオプションが関数 trainingOptions ですべて用意されている場合、関数 trainNetwork を使用して深層学習ネットワークに学習させることができます。例については、分類用のシンプルな深層学習ニューラル ネットワークの作成を参照してください。

カスタム学習率スケジュールなど、必要な学習オプションが関数 trainingOptions に用意されていない場合、dlnetwork オブジェクトを使用してカスタム学習ループを自分で定義できます。例については、カスタム学習ループを使用したネットワークの学習を参照してください。

参考

| |

関連するトピック