主要内容

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

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

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

ヒント

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

学習手法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

判定

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

判定 詳細
深度学习工具箱™には,適切な事前学習済みのネットワークが用意されているか

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

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

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

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

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

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

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

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

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

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

必要な中間層が深度学习工具箱に用意されているか

深度学习工具箱には,深層学習タスク用の層が数多く用意されています。層の一覧については,深層学習層の一覧を参照してください。

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

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

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

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

必要な出力層が深度学习工具箱に用意されているか

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

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

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

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

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

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

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

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

参考

|

関連するトピック