主要内容

。

深层学习のヒントとコツ

このページでは,深层学习ネットワークの精度を改善するための,さまざまな学习オプションや手法について说明します。

ネットワークアーキテクチャの選択

适切なネットワークアーキテクチャは,タスクや利用可能なデータによって异なります。どのアーキテクチャを使用するかや,事前学习済みのネットワークを使用するかゼロから学习させるかを决定する际に,以下の推奨事项を検讨してください。

データ タスクの説明 详细
イメージ 自然イメージの分類

さまざまな事前学习済みのネットワークを试してみてください。事前学习済みの深层学习ネットワークの一覧については,事前学習済みの深層ニューラルネットワークを参照してください。

ディープネットワークデザイナーを使用して転移学習用のネットワークを対話形式で準備する方法については,ディープネットワークデザイナーを使用した転移学习を参照してください。

自然イメージの回帰 さまざまな事前学習済みのネットワークを試してみてください。事前学習済みの分類ネットワークを回帰ネットワークに変換する方法を示す例については,分類ネットワークの回帰ネットワークへの変換を参照してください。
自然イメージ以外のイメージの分类と回帰(非常に小さいイメージやスペクトログラムなど)

非常に小さいイメージの分類方法を示す例については,イメージ分類用の残差ネットワークの学習を参照してください。

スペクトログラムの分類方法を示す例については,深層学習を使用した音声コマンド認識を参照してください。

セマンティックセグメンテーション 计算机视觉工具箱™には,セマンティックセグメンテーション用の深層学習ネットワークを作成するためのツールが用意されています。詳細については,深层学习を使用したセマンティックセグメンテーション入门(计算机视觉工具箱)を参照してください。
シーケンス,时系列,および信号 序列至标签分类 例については,深层学习を使用したシーケンスの分类を参照してください。
序列对序列分类と回帰 詳細は,深层学习を使用した序列到序列分类および深层学习を使用した序列到序列回帰を参照してください。
时系列予测 例については,深層学習を使用した時系列予測を参照してください。
テキスト 分类と回帰 文本分析工具箱™には,テキストデータ用の深层学习ネットワークを作成するためのツールが用意されています。例については,深层学习を使用したテキストデータの分类を参照してください。
テキスト生成 例については,深层学习を使用したテキストの生成を参照してください。
音频 オーディオの分类と回帰 例については,深層学習を使用した音声コマンド認識を参照してください。

学习オプションの选択

关节trainingOptionsには,深層学習ネットワークに学習させるためのさまざまなオプションがあります。

ヒント 详细
学习の进行状况を监视する 学习の进行状况プロットをオンにするには,trainingOptions'plots'オプションを'培训 - 进步'に设定します。
検证データを使用する

検证データを指定するには,trainingOptions“ValidationData”オプションを使用します。

メモ

検証データセットが小さすぎてデータを十分に表していない場合,報告されたメトリクスが役に立たない可能性があります。使用する検証データセットが大きすぎると,学習に時間がかかる可能性があります。

転移学習の場合,新しい層の学習速度を上げて,転移層での学習速度を下げる

たとえば,convolution2dLayerWeightLearnRateFactorプロパティを使用して,新しい層に指定する学習率係数を増やします。

trainingOptions'italllearnrate'オプションを使用して,初期学習率を減らします。

転移学習の場合,同じエポック数の学習を行う必要はありません。trainingOptions'maxepochs'オプションを使用して,エポック数を減らします。

ディープネットワークデザイナーを使用して転移学習用のネットワークを対話形式で準備する方法については,ディープネットワークデザイナーを使用した転移学习を参照してください。

すべてのエポックでデータをシャッフルする

すべてのエポック(データを一巡すること)でデータをシャッフルするには,trainingOptions“洗牌”オプションを“every-epoch”に设定します。

メモ

シーケンスデータの场合,シャッフルを行うとパディングや切り舍てられるデータの量が増える可能性があるため,シャッフルが精度に悪影响を与えることがあります。シーケンスデータを使用する场合,シーケンス长でデータを并べ替えると役に立つことがあります。详细については,シーケンスのパディング,切り舍て,および分割を参照してください。

さまざまなオプティマイザーを试す

さまざまなオプティマイザーを指定するには,trainingOptionsの引数solverNameを使用します。

詳細については,パラメーターの设定と畳み込みニューラルネットワークの学习を参照してください。

学习精度の改善

学習中に問題に気が付いた場合は,以下の考えられる解決策について検討してください。

问题 考えられる解決策
损失に的NaNまたは大きなスパイクがある

trainingOptions'italllearnrate'オプションを使用して,初期学習率を減らします。

学习率を减らしても效果がない场合は,勾配クリップの使用を试してください。勾配のしきい値を设定するには,trainingOptions“GradientThreshold”オプションを使用します。

学习の终了时に损失がまだ减少している trainingOptions'maxepochs'オプションを使用してエポック数を増やすことによって,学習時間を延ばします。
損失が横ばいになる

予想外に大きい値で損失が横ばいになる場合は,横ばいになったところで学習率を下げます。学習率のスケジュールを変更するには,trainingOptions“LearnRateSchedule”オプションを使用します。

学習率を下げても効果がない場合は,モデルが適合不足である可能性があります。パラメーターの数または層の数を増やしてみてください。検証損失を監視することによって,モデルが適合不足かどうか確認できます。

検证损失が学习损失をはるかに上回っている

過適合を防止するには,以下の1つ以上を試してください。

损失の减少が非常に遅い

trainingOptions'italllearnrate'オプションを使用して,初期学習率を増やします。

イメージデータの场合,ネットワークにバッチ正规化层を含めてみてください。详细については,batchNormalizationLayerを参照してください。

詳細については,パラメーターの设定と畳み込みニューラルネットワークの学习を参照してください。

学習のエラーの修正

ネットワークが少しも学习されない场合は,以下の考えられる解决策について検讨してください。

エラー 说明 考えられる解決策
学習時のメモリ不足エラー 利用可能なハードウェアに现在のミニバッチ,ネットワークの重み,および计算した活性化を格纳できません。

trainingOptions'minibatchsize'オプションを使用してミニバッチサイズを減らしてみてください。

ミニバッチサイズを減らしても効果がない場合は,層の数を減らすか層内のパラメーター数またはフィルター数を減らして,小規模なネットワークの使用を試してください。

カスタム層のエラー カスタム層の実装に問題がある可能性があります。

checkLayerを使用してカスタム层の有效性をチェックし,潜在的な问题を见つけます。

checkLayerを使用してテストに失敗した場合,この関数はテスト診断とフレームワーク診断を表示します。テスト診断は層の問題を示しますが,フレームワーク診断は,より詳細な情報を提供します。テスト診断の詳細と考えられる解決策の提案については,诊断を参照してください。

学習がエラー“CUDA_ERROR_UNKNOWN”をスローする GPUがOSからの要求の计算と表示の両方に使用されている场合,このエラーをスローすることがあります。

trainingOptions'minibatchsize'オプションを使用してミニバッチサイズを減らしてみてください。

ミニバッチサイズを減らしても効果がない場合は,窗户®で,タイムアウト検出と復旧(TDR)の設定を調整してみてください。たとえば,TdrDelayを2秒(既定の設定)から4秒に変更します(レジストリの編集が必要)。

analyzeNetworkを使用して,深层学习ネットワークを解析できます。关数analyzeNetworkは,ネットワークアーキテクチャを対話的に可視化して表示し,ネットワークに関するエラーや問題を検出して,ネットワーク層についての詳細情報を提供します。ネットワークアナライザーを使用して,ネットワークアーキテクチャを可視化して把握し,アーキテクチャが正しく定義されていることを確認して,学習前に問題を検出します。analyzeNetworkが検出する問題には,層の欠損または切り離し,層入力のサイズの不一致や誤り,層の入力数の誤り,無効なグラフ構造などがあります。

データの準備と前処理

データを前処理して,精度を高めることができます。

クラスの重み付けまたはバランス调整

観测値の数がすべてのクラスで等しいことが理想的です。ただし,タスクによっては,クラスが不均衡である场合があります。たとえば,路上シーンの自动车データセットには,歩行者や自転车运転者のピクセルよりも多くの空,建物,および道路のピクセルが含まれる倾向があります。これは,空,建物,および道路がより広いイメージ领域を占めているためです。学习では上位クラスを优先してバイアスがかけられるため,正しく处理されていない场合は,こうした不均衡が学习プロセスに悪影响を及ぼす可能性があります。

セマンティックセグメンテーションタスクの场合,ClassWeights(计算机视觉工具箱)プロパティを使用してpixelClassificationLayer(计算机视觉工具箱)にクラスの重みを指定できます。イメージ分類タスクの場合,カスタム重み付き分類層の定義に记载されているカスタム分类层の例を使用できます。

または,以下の1つ以上を行って,クラスのバランスを调整することもできます。

  • 最も頻度が少ないクラスに新しい観測値を追加します。

  • 最も頻度が多いクラスから観測値を削除します。

  • 类似のクラスをグループ化します。たとえば,クラス “汽车” および “卡车” を単一のクラス “车辆” にグループ化します。

イメージデータの前处理

イメージデータの前处理の详细については,イメージの深層学習向け前処理を参照してください。

タスク 详细
イメージのサイズ変更

事前学習済みのネットワークを使用するには,ネットワークの入力サイズに合わせてイメージのサイズを変更しなければなりません。イメージのサイズを変更するには,augmentedImageDatastoreを使用します。たとえば,この构文はイメージデータストアIMDS内のイメージのサイズを変更します。

auimds = augmentedImageDatastore(inputSize,IMDS);

ヒント

イメージのサイズ変更を含む深层学习用のイメージの前处理を效率的に行うには,augmentedImageDatastoreを使用します。

imageDatastorereadFcnオプションは通常,速度が大幅に低下するため,前処理またはサイズ変更に使用しないでください。

イメージ拡张

过适合を避けるには,イメージ変换を使用します。详细については,拡张イメージを使用したネットワークの学习を参照してください。

回帰ターゲットの正規化

ネットワークに入力する前に予测子を正规化します。学习の前に応答を正规化する场合,学习済みネットワークの予测を変换して,元の応答の予测を求めなければなりません。

詳細については,回帰用の畳み込みニューラルネットワークの学習を参照してください。

シーケンスデータの前処理

LSTMネットワークの使用方法の详细については,长短期记忆ネットワークを参照してください。

タスク 详细
シーケンスデータの正规化

シーケンスデータを正规化するには,まず,すべてのシーケンスについて特徴あたりの平均値と标准偏差を计算します。次に,各学习観测値について,平均値を减算し,标准偏差で除算します。

詳細については,シーケンスデータの正规化を参照してください。

シーケンスのパディングと切り舍ての削减

シーケンスのパディングまたは切り舍ての际に,パディングまたは破弃するデータの量を减らすには,シーケンス长でデータを并べ替えてみてください。

詳細については,シーケンスのパディング,切り舍て,および分割を参照してください。

予測のためのミニバッチのサイズとパディングのオプションの指定

长さが异なるシーケンスで予测を行うと,ミニバッチのサイズが,入力データに追加されるパディングの量に影响し,异なる予测値が得られることがあります。さまざまな値を使用して,ネットワークに最适なものを确认してください。

ミニバッチのサイズとパディングのオプションを指定するには,关数分类预测classifyAndUpdateState,およびpredictAndUpdateState'minibatchsize'および“SequenceLength”オプションを使用します。

利用可能なハードウェアの使用

実行環境を指定するには,trainingOptions'executionenvironment'オプションを使用します。

问题 详细
CPUでの学习が遅い 単一のCPUでの学習が非常に遅い場合,事前学習済みの深層学習ネットワークを特徴抽出器として使用して,機械学習モデルに学習させてみてください。例については,事前学習済みのネットワークを使用したイメージの特徴の抽出を参照してください。
GPUでのLSTMの学习が遅い

CPUは,シーケンスが短いミニバッチを使用するLSTMネットワークの学习に适しています.CPUを使用するには,trainingOptions'executionenvironment'オプションを'CPU'に设定します。

利用可能なGPUで使用されないものがある 複数のGPUがあるマシンにアクセスできる場合は,単にtrainingOptions'executionenvironment'オプションを“多GPU”に设定します。详细については,复数のGPUでの深层学习を参照してください。

詳細については,并列およびクラウドでの深层学习のスケールアップを参照してください。

MATファイルからの読み込みに关するエラーの修正

垫ファイルから層またはネットワークを読み込むことができず,次のような形式の警告が表示される場合があります。

警告:无法类layerType的实例加载到异质阵列。layerType的定义可能是丢失或包含错误。缺省对象将被取代。警告:在层nnet.cnn.layer.MissingLayer使用“前进”错误:在加载的类的SeriesNetwork'的对象。该函数抛出一个错误,无法执行。
その场合,MATファイル内のネットワークに,使用できない层が含まれている可能性があります。これには以下のような原因が考えられます。

  • ファイルに,パスにないカスタム層が含まれている——カスタム層が含まれるネットワークを読み込むには,カスタム層ファイルをMATLAB®パスに追加します。

  • ファイルにサポートパッケージのカスタム層が含まれている——サポートパッケージの層を使用するネットワークを読み込むには,対応する関数(resnet18など)を使用するか,アドオンエクスプローラーを使用して,コマンドラインで必要なサポートパッケージをインストールします。

  • ファイルに,パスにないドキュメンテーションの例のカスタム层が含まれている - ドキュメンテーションの例のカスタム层が含まれるネットワークを読み込むには,例をライブスクリプトとして开いて,例のフォルダーから作业ディレクトリに层をコピーします。

  • ファイルに,インストールされていないツールボックスの層が含まれている——计算机视觉工具箱や文本分析工具箱など,他のツールボックスの層にアクセスするには,対応するツールボックスをインストールします。

推奨されている解決策を試した後,垫ファイルを再度読み込みます。

参考

|||

関連するトピック