主要内容

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

深層学習のヒントとコツ

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

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

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

データ タスクの説明 詳細
イメージ 自然イメージの分類

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

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

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

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

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

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

学習オプションの選択

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

ヒント 詳細
学習の進行状況を監視する 学習の進行状況プロットをオンにするには,trainingOptions“阴谋”オプションを“训练进步”に設定します。
検証データを使用する

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

メモ

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

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

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

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

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

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

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

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

メモ

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

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

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

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

学習精度の改善

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

問題 考えられる解決策
損失に南または大きなスパイクがある

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

学習率を減らしても効果がない場合は,勾配クリップの使用を試してください。勾配のしきい値を設定するには,trainingOptions“GradientThreshold”オプションを使用します。

学習の終了時に損失がまだ減少している trainingOptions“MaxEpochs”オプションを使用してエポック数を増やすことによって,学習時間を延ばします。
損失が横ばいになる

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

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

検証損失が学習損失をはるかに上回っている

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

損失の減少が非常に遅い

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

イメージデータの場合,ネットワークにバッチ正規化層を含めてみてください。詳細については,batchNormalizationLayerを参照してください。

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

学習のエラーの修正

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

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

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

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

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

checkLayerを使用してカスタム層の有効性をチェックし,潜在的な問題を見つけます。

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

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

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

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

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

データの準備と前処理

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

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

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

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

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

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

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

  • 類似のクラスをグループ化します。たとえば,クラス "car" および "truck" を単一のクラス "vehicle" にグループ化します。

イメージデータの前処理

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

タスク 詳細
イメージのサイズ変更

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

auimds = augmentedImageDatastore (inputSize, imd);

ヒント

イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには,augmentedImageDatastoreを使用します。

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

イメージ拡張

過適合を避けるには,イメージ変換を使用します。詳細については,拡張イメージを使用したネットワークの学習を参照してください。

回帰ターゲットの正規化

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

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

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

LSTMネットワークの使用方法の詳細については,長短期記憶ネットワークを参照してください。

タスク 詳細
シーケンスデータの正規化

シーケンスデータを正規化するには,まず,すべてのシーケンスについて特徴あたりの平均値と標準偏差を計算します。次に,各学習観測値について,平均値を減算し,標準偏差で除算します。

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

シーケンスのパディングと切り捨ての削減

シーケンスのパディングまたは切り捨ての際に,パディングまたは破棄するデータの量を減らすには,シーケンス長でデータを並べ替えてみてください。

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

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

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

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

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

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

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

CPUはシーケンスが短いミニバッチを使用するLSTMネットワークの学習に適しています。CPUを使用するには,trainingOptions“ExecutionEnvironment”オプションを“cpu”に設定します。

利用可能なGPUで使用されないものがある 複数のGPUがあるマシンにアクセスできる場合は,単にtrainingOptions“ExecutionEnvironment”オプションを“multi-gpu”に設定します。詳細については、複数のGPUでの深層学習を参照してください。

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

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

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

警告:无法将类layerType的实例加载到异构数组。layerType的定义可能缺失或包含错误。默认对象将被替换。Warning: While loading an object of class 'SeriesNetwork': Error using 'forward' in Layer net.cnn. Layer. missinglayer。该函数抛出一个错误,无法执行。
その場合,垫ファイル内のネットワークに,使用できない層が含まれている可能性があります。これには以下のような原因が考えられます。

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

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

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

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

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

参考

|||

関連するトピック