ディープ ネットワーク デザイナーへのデータのインポート
ディープ ネットワーク デザイナーでは、学習データおよび検証データをインポートして可視化できます。このアプリを使って次のことを実行できます。
学習用にデータストア オブジェクトをインポートする。インポート後、ディープ ネットワーク デザイナーはデータのプレビューを表示します。詳細については、データのインポートを参照してください。
ImageDatastore
オブジェクト、またはイメージのサブフォルダーをクラス別に含むフォルダーから、イメージ分類問題の学習データをインポートする。組み込みオプションを選択して、学習中に学習イメージを拡張することも可能です。詳細については、イメージ拡張を参照してください。検証データをデータストア オブジェクトからインポートする。イメージ分類について、各クラスのイメージのサブフォルダーを含むフォルダーから検証データを選択すること、または学習データから検証データを分割するように選択することもできます。詳細については、検証データを参照してください。
深層学習を始めるために使用できるデータ セットの詳細については、深層学習用のデータセットを参照してください。深層学習アプリケーション用のデータストア オブジェクトの構築と使用の詳細については、深層学習用のデータストアを参照してください。
データのインポート
ディープ ネットワーク デザイナーでは、イメージ データストア、または各クラスからのイメージのサブフォルダーを含むフォルダーから、イメージ分類データをインポートできます。関数 trainNetwork
で機能する任意のデータストア オブジェクトをインポートして学習させることもできます。使用するデータストアのタイプに基づいてインポート方法を選択します。
ImageDatastore オブジェクトのインポート | その他のデータストア オブジェクトのインポート (ImageDatastore には非推奨) |
---|---|
[データのインポート] 、 [イメージ分類データのインポート] を選択します。
| [データのインポート] 、 [カスタム データのインポート] を選択します。
|
インポート後、ディープ ネットワーク デザイナーは、インポートされたデータのプレビューを表示します。それにより、データが想定どおりであることを学習前にチェックできます。イメージ分類データについて、ディープ ネットワーク デザイナーは、クラス ラベルのヒストグラム、およびインポートされたデータからランダムに選択されたイメージを表示することもできます。特定のクラスに属するイメージをランダムに表示するよう選択することもできます。
データのタスク別のインポート
タスク | データ型 | データのインポート方法 | 可視化の例 |
---|---|---|---|
イメージ分類 | クラスごとのイメージを含むサブフォルダーのあるフォルダー。クラス ラベルは、サブフォルダー名から取得されます。 例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。 | [データのインポート] 、 [イメージ分類データのインポート] を選択します。 拡張オプションを選択し、[イメージ データのインポート] ダイアログ ボックスを使用して検証データを指定することができます。 インポート後、ディープ ネットワーク デザイナーはクラス ラベルのヒストグラムを表示します。各クラスからのランダムな観測値も確認できます。 | |
たとえば、数字データを含むイメージ データストアを作成します。 dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 'nndatasets','DigitDataset'); imds = imageDatastore(dataFolder, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); | |||
たとえば、数字データを含む拡張されたイメージ データストアを作成します。 dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 'nndatasets','DigitDataset'); imds = imageDatastore(dataFolder, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); imageAugmenter = imageDataAugmenter( ... 'RandRotation',[1,2]); augimds = augmentedImageDatastore([28 28],imds, ... 'DataAugmentation',imageAugmenter); augimds = shuffle(augimds); | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 | ||
セマンティック セグメンテーション | たとえば、 dataFolder = fullfile(toolboxdir('vision'), ... 'visiondata','triangleImages'); imageDir = fullfile(dataFolder,'trainingImages'); labelDir = fullfile(dataFolder,'trainingLabels'); imds = imageDatastore(imageDir); classNames = ["triangle","background"]; labelIDs = [255 0]; pxds = pixelLabelDatastore(labelDir,classNames,labelIDs); cds = combine(imds,pxds);
pximds = pixelLabelImageDatastore(imds,pxds); | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 | |
image-to-image 回帰 | たとえば、ノイズを含む入力イメージと初期状態の出力イメージを組み合わせて、image-to-image 回帰に適したデータを作成します。 dataFolder = fullfile(toolboxdir('nnet'),'nndemos', ... 'nndatasets','DigitDataset'); imds = imageDatastore(dataFolder, ... 'IncludeSubfolders',true, .... 'LabelSource','foldernames'); imds = transform(imds,@(x) rescale(x)); imdsNoise = transform(imds,@(x) {imnoise(x,'Gaussian',0.2)}); cds = combine(imdsNoise,imds); cds = shuffle(cds); | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 | |
回帰 | 配列データストア オブジェクトを組み合わせて、回帰ネットワークの学習に適したデータを作成します。 [XTrain,~,YTrain] = digitTrain4DArrayData; ads = arrayDatastore(XTrain,'IterationDimension',4, ... 'OutputType','cell'); adsAngles = arrayDatastore(YTrain,'OutputType','cell'); cds = combine(ads,adsAngles); 回帰ネットワークの学習の詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。 | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 | |
シーケンスおよび時系列 | シーケンス データを予測子のデータストアから深層学習ネットワークに入力するには、シーケンスのミニバッチが同じ長さでなければなりません。関数 たとえば、すべてのシーケンスが最長のシーケンスと同じ長さになるようにシーケンスをパディングします。 [XTrain,YTrain] = japaneseVowelsTrainData;
XTrain = padsequences(XTrain,2);
adsXTrain = arrayDatastore(XTrain,'IterationDimension',3);
adsYTrain = arrayDatastore(YTrain);
cdsTrain = combine(adsXTrain,adsYTrain); パディングの量を減らすには、変換されたデータストアと補助関数を使用します。たとえば、ミニバッチのすべてのシーケンスがそのミニバッチにある最長のシーケンスと同じ長さになるようにシーケンスをパディングします。また、学習オプションでは同じミニバッチ サイズを使用しなければなりません。 [XTrain,TTrain] = japaneseVowelsTrainData; miniBatchSize = 27; adsXTrain = arrayDatastore(XTrain,'OutputType',"same",'ReadSize',miniBatchSize); adsTTrain = arrayDatastore(TTrain,'ReadSize',miniBatchSize); tdsXTrain = transform(adsXTrain,@padToLongest); cdsTrain = combine(tdsXTrain,adsTTrain); function data = padToLongest(data) sequence = padsequences(data,2,Direction="left"); for n = 1:numel(data) data{n} = sequence(:,:,n); end end データを短い順に並べ替えてパディングの量を減らしたり、パディングの向きを指定してパディングの影響を減らしたりすることもできます。シーケンス データのパディングの詳細については、シーケンスのパディング、切り捨て、および分割を参照してください。 時系列データでネットワークに学習させる方法については、ディープ ネットワーク デザイナーを使用して時系列予測をネットワークに学習させるを参照してください。 カスタム データストア オブジェクトを使用してシーケンス データをインポートすることもできます。カスタム シーケンス データストアを作成する方法を示す例については、シーケンス データのカスタム ミニバッチ データストアを使用したネットワークの学習を参照してください。 | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 | |
その他の拡張ワークフロー (数値特徴入力、メモリ外のデータ、イメージ処理、オーディオ処理および音声処理など) | データストア その他の拡張ワークフローでは、適切なデータストア オブジェクトを使用してください。たとえば、カスタム データストア、 たとえば、Image Processing Toolbox™ を使用して、 dataFolder = fullfile(toolboxdir('images'),'imdata'); imds = imageDatastore(dataFolder,'FileExtensions',{'.jpg'}); dnds = denoisingImageDatastore(imds,... 'PatchesPerImage',512,... 'PatchSize',50,... 'GaussianNoiseLevel',[0.01 0.1]); オーディオ データで深層学習ネットワークに学習させる方法を示す例については、Transfer Learning with Pretrained Audio Networks in Deep Network Designerを参照してください。 table 配列データの場合、ディープ ネットワーク デザイナーを使用して学習させるには、データを適切なデータストアに変換しなければなりません。たとえば、最初に予測子と応答を含む配列に table を変換します。次に、この配列を | [データのインポート] 、 [カスタム データのインポート] を選択します。 [データストアのインポート] ダイアログ ボックスで検証データを指定できます。 インポート後、ディープ ネットワーク デザイナーは、データストア内の最初の 5 つの観測値のプレビューを表示します。 |
イメージ拡張
イメージ分類問題について、ディープ ネットワーク デザイナーは、学習データに適用する単純な拡張オプションを提供しています。[データのインポート] 、 [イメージ分類データのインポート] を選択して、[イメージ分類データのインポート] ダイアログ ボックスを開きます。反射、回転、再スケーリング、平行移動といった操作のランダムな組み合わせを学習データに適用するオプションを選択できます。
ランダム化された "拡張" をデータに適用して、実質的に学習データの量を増やすことができます。拡張では、イメージ データの歪みに対して不変になるようにネットワークに学習させることもできます。たとえば、入力イメージに存在する回転に対してネットワークが不変になるように、入力イメージにランダムな回転を追加できます。データ拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのにも役立ちます。データ拡張を使用する場合、各イメージについてランダムに拡張された 1 つのイメージが、学習の各エポックで使用されます。ここで、エポックとは、学習データ セット全体に対する学習アルゴリズムを一巡することです。したがって、各エポックで使用されるデータ セットはわずかに異なりますが、各エポックにおける学習イメージの実際の数は変化しません。詳細については、イメージ分類用のデータストアの作成と確認を参照してください。
ディープ ネットワーク デザイナーが提供するイメージ前処理演算より一般的で複雑なイメージ前処理演算を実行するには、TransformedDatastore
オブジェクトおよび CombinedDatastore
オブジェクトを使用します。CombinedDatastore
オブジェクトおよび TransformedDatastore
オブジェクトをインポートするには、[データのインポート] 、 [カスタム データのインポート] を選択します。
イメージ拡張の詳細については、イメージの深層学習向け前処理を参照してください。
検証データ
ディープ ネットワーク デザイナーでは、使用する検証データを学習中にインポートできます。検証データは、学習中、ネットワークが重みとバイアスを更新するためには使用しないデータです。ネットワークがこのデータを直接使用することはないため、学習中にネットワークの真の精度を評価するのに役立ちます。損失や精度などの検証メトリクスを監視して、ネットワークが過適合または適合不足かどうかを評価し、必要に応じて学習オプションを調整できます。たとえば、検証損失が学習損失をはるかに上回っている場合、ネットワークは過適合している可能性があります。
深層学習ネットワークの精度の改善に関する詳細については、深層学習のヒントとコツを参照してください。
ディープ ネットワーク デザイナーでは、次のように検証データをインポートできます。
ワークスペース内のデータストアから。
クラスごとのイメージのサブフォルダーを含むフォルダーから (イメージ分類データのみ)。
検証データとして使用する学習データの一部を分割することによって (イメージ分類データのみ)。学習を行う前に、一度、データを検証セットと学習セットに分割します。この手法はホールドアウト検証と呼ばれます。
検証データの学習データからの分割
学習データからホールドアウト検証データを分割する際、ディープ ネットワーク デザイナーは、各クラスから一定の割合の学習データを分割します。たとえば、cat と dog という 2 つのクラスをもつデータ セットがあり、検証用に学習データの 30% を使用することを選択したとします。ディープ ネットワーク デザイナーは、ラベル "cat" をもつイメージの最後の 30% とラベル "dog" をもつイメージの最後の 30% を検証セットとして使用します。
学習データの最後の 30% を検証データとして使用するのではなく、学習セットと検証セットに観測値をランダムに割り当てるという選択もできます。その場合、[イメージ データのインポート] ダイアログ ボックスの [ランダム化] チェック ボックスをオンにします。イメージをランダム化することで、非ランダムな順序で保存されたデータで学習したネットワークの精度を向上させることができます。たとえば、数字データ セットは、手書き数字の合成グレースケール イメージ 10,000 個で構成されています。このデータ セットには、同じスタイルの手書きイメージは各クラス内で隣り合うという、基となる順序があります。表示例を示します。
ランダム化すると、学習セットおよび検証セットに各クラスのランダムなイメージが含まれるよう、データの分割時にイメージが確実にシャッフルされます。類似したイメージが配布された学習データおよび検証データを使用することは、過適合の防止に役立ちます。データをランダム化しなければ、分割された学習データおよび検証データは毎回必ず同じものとなり、結果の再現性の向上に役立ちます。詳細については、splitEachLabel
を参照してください。
参考
ディープ ネットワーク デザイナー | TransformedDatastore
| CombinedDatastore
| imageDatastore
| augmentedImageDatastore
| splitEachLabel