Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

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

ヒント

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

学習手法

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

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

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

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

trainingOptions および trainNetwork を使用してネットワークに学習させる

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

ネットワークの再学習 (転移学習) を行う方法を示す例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。ネットワークにゼロから学習させる方法を示す例については、分類用のシンプルな深層学習ネットワークの作成を参照してください。

dlnetwork オブジェクトとカスタム学習ループを使用してネットワークに学習させる

ほとんどのタスクでは、関数 trainingOptions および trainNetwork を使用して学習アルゴリズムの詳細を制御できます。タスク (たとえば、カスタム学習率スケジュール) に必要なオプションが関数 trainingOptions に用意されていない場合、dlnetwork オブジェクトを使用して自分でカスタム学習ループを定義できます。dlnetwork オブジェクトを使用すると、自動微分を使用して、層グラフとして指定したネットワークに学習させることができます。

出力層を使用して指定できない損失関数の場合、カスタム学習ループで損失を指定できます。カスタム学習率スケジュールでネットワークに学習させる方法を示す例については、カスタム学習ループを使用したネットワークの学習を参照してください。

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

モデル関数とカスタム学習ループを使用してネットワークに学習させる

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

ネットワークの一部を層グラフを使用して作成できる場合、それらの部分を層グラフとして定義し、サポートされていない部分をモデル関数を使用して定義することができます。

判定

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

判定詳細
Deep Learning Toolbox™ には、適切な事前学習済みのネットワークが用意されているか

ほとんどのタスクでは、googlenet といった事前学習済みのネットワークの使用または再学習が可能です。

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

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

必要なタスクを既に実行している事前学習済みのネットワークが存在する場合、再学習させることなくそのネットワークを直接使用できます。たとえば、googlenet ネットワークを使用して 1000 個を超えるクラスにイメージを分類できます。ネットワークによる予測を直接行うには、関数 classify および predict を使用します。例については、GoogLeNet を使用したイメージの分類を参照してください。

ネットワークに再学習させる必要がある場合 (異なるクラスのセットを分類するようにモデルを再学習させる場合など)、転移学習を使用してネットワークに再学習させることができます。

モデルを層配列または層グラフとして定義できるか

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

ネットワークのアーキテクチャによっては、層グラフとして定義することができません。たとえば、シャム ネットワークは、重みを共有する必要があり、層グラフとして定義できないため、モデルを関数として定義しなければなりません。例については、モデル関数を使用したネットワークの学習を参照してください。

ネットワークの出力は 1 つだけか

複数の出力をもつネットワークの場合、カスタム学習ループを使用してネットワークに学習させなければなりません。例については、複数の出力をもつネットワークの学習を参照してください。

必要な中間層が Deep Learning Toolbox に用意されているか

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

必要な中間層 (ネットワークの中間にある層) が Deep Learning Toolbox に用意されている場合、それらの層を使用して層配列または層グラフとしてネットワークを定義できます。そうでない場合は、サポートされていない層をカスタム層として定義してみてください。詳細については、カスタム深層学習層の定義を参照してください。

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

必要な層が Deep Learning Toolbox に用意されていない場合、カスタム深層学習層を定義してみることができます。詳細については、カスタム深層学習層の定義を参照してください。

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

必要な出力層が Deep Learning Toolbox に用意されているか

出力層では、学習に使用する損失関数を指定します。Deep Learning Toolbox には、深層学習タスク用のさまざまな出力層が用意されています。たとえば、classificationLayerregressionLayer のようにします。出力層の一覧については、深層学習層の一覧のページにある出力層の節を参照してください。

必要な出力層が Deep Learning Toolbox に用意されている場合、これらの層を使用して層グラフとしてネットワークを定義できます。そうでない場合は、サポートされていない出力層をカスタム層として定義してみてください。詳細については、カスタム深層学習層の定義を参照してください。

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

必要な出力層が Deep Learning Toolbox に用意されていない場合、カスタム出力層を定義してみることができます。詳細については、カスタム深層学習層の定義を参照してください。

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

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

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

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

参考

|

関連するトピック