主要内容

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

分類用のシンプルな深層学習ネットワークの作成

この例では,深層学習による分類用のシンプルな畳み込みニューラルネットワークを作成し,学習を行う方法を説明します。畳み込みニューラルネットワークは深層学習に不可欠なツールであり,特にイメージの認識に適しています。

この例では,以下を実行する方法を示します。

  • イメージデータの読み込みと確認。

  • ネットワークアーキテクチャの定義。

  • 学習オプションの指定。

  • ネットワークに学習をさせます。

  • 新しいデータのラベルの予測と分類精度の計算。

イメージデータの読み込みと確認

数字の標本データをイメージデータストアとして読み込みます。imageDatastoreは,フォルダー名に基づいてイメージに自動的にラベルを付け,データをImageDatastoreオブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータなどの大きなイメージデータを格納し,畳み込みニューラルネットワークの学習中にイメージをバッチ単位で効率的に読み取ることができます。

digitDatasetPath = fullfile (matlabroot,“工具箱”“nnet”“nndemos”...“nndatasets”“DigitDataset”);imd = imageDatastore (digitDatasetPath,...“IncludeSubfolders”,真的,“LabelSource”“foldernames”);

データストアのイメージをいくつか表示します。

图;烫= randperm(10000年,20);I = 1:20 subplot(4,5, I);imshow (imds.Files{烫发(i)});结束

各カテゴリのイメージの数を計算します。labelCountは,ラベル,およびそれぞれのラベルが付いているイメージの数を格納する表です。データストアには0 ~ 9の数字それぞれについて1000個のイメージ,合計で10000個のイメージが含まれます。ネットワークの最後の全結合層のクラス数を引数OutputSizeとして指定できます。

labelCount = countEachLabel (imd)
labelCount =10×2表标签数_____ _____ 0 1000 1 1000 2 1000 3 1000 4 1000 5 1000 6 1000 7 1000 8 1000 9 1000

ネットワークの入力層にイメージのサイズを指定しなければなりません。digitDataの最初のイメージのサイズを確認します。イメージはそれぞれ28 28 x 1ピクセルです。

img = readimage (imd, 1);大小(img)
ans =1×228日28日

学習セットと検証セットの指定

データを学習データセットと検証データセットに分割し,学習セットの各カテゴリに750個のイメージが含まれ,検証セットに各ラベルの残りのイメージが含まれるようにします。splitEachLabelは,データストアdigitDataを2つの新しいデータストアtrainDigitDatavalDigitDataに分割します。

numTrainFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imd, numTrainFiles“随机”);

ネットワークアーキテクチャの定義

畳み込みニューラルネットワークアーキテクチャを定義します。

layers = [imageInputLayer([28 28 1])卷积2dlayer (3,8,“填充”“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”“相同”) batchNormalizationLayer reluLayer fulllyconnectedlayer (10) softmaxLayer classiationlayer];

イメージ入力層imageInputLayerにはイメージサイズを指定します。ここでは28 28 x 1です。これらの数値は,高さ,幅,およびチャネルサイズに対応します。数字データはグレースケールイメージで構成されるため,チャネルサイズ(カラーチャネル)は1です。カラーイメージの場合,RGB値に対応してチャネルサイズは3になります。データは,trainNetworkにより既定で学習の開始時にシャッフルされるため,シャッフルの必要はありません。学習時の各エポックの開始時にも,trainNetworkによりデータは自動的にシャッフルされます。

畳み込み層畳み込み層の最初の引数はfilterSizeです。これは,イメージのスキャン時に学習関数によって使用されるフィルターの高さと幅を示します。この例では3という数字によってフィルターサイズが3 x 3であることを示しています。フィルターの高さと幅には異なるサイズを指定できます。2つ目の引数numFiltersはフィルターの数です。これは,入力の同じ領域に結合するニューロンの数を示します。このパラメーターによって、特徴マップの数が決定されます。名前と値のペア“填充”を使用して,入力の特徴マップにパディングを追加します。既定のストライドが1の畳み込み層の場合,“相同”パディングによって空間の出力サイズが入力サイズと同じになります。convolution2dLayerの名前と値のペアの引数を使用して,この層のストライドと学習率を定義することもできます。

バッチ正規化層バッチ正規化層は,ニューラルネットワークを通じて伝播される活性化と勾配を正規化します。これにより,ネットワークの学習は簡単な最適化問題になります。畳み込み層の間にあるバッチ正規化層と、ReLU 層などの非線形性を使用して、ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げます。batchNormalizationLayerを使用して,バッチ正規化層を作成します。

ReLU層バッチ正規化層の後に非線形活性化関数が続きます。最も一般的な活性化関数は,正規化線形ユニット(ReLU)です。reluLayerを使用して,ReLU層を作成します。

最大プーリング層畳み込み層(と活性化関数)の後で,ダウンサンプリング処理を行うことがあります。これにより,特徴マップの空間サイズが縮小され,冗長な空間情報が削除されます。ダウンサンプリングでは,層ごとに必要な計算量を増やさずに,より深い畳み込み層のフィルターの数を増やすことができます。ダウンサンプリングの1つの方法が最大プーリングの使用です。これは,maxPooling2dLayerを使用して作成します。最大プーリング層は、最初の引数poolSizeによって指定された,入力の矩形領域の最大値を返します。この例では,矩形領域のサイズは(2,2)です。名前と値のペアの引数“步”は,入力に沿ってスキャンするときに学習関数が取るステップサイズを指定します。

全結合層畳み込み層とダウンサンプリング層の後には,1つ以上の全結合層を配置します。その名前からわかるように,全結合層はニューロンが前の層のすべてのニューロンに結合している層です。この層は,前の層によってイメージ全体で学習されたすべての特徴を組み合わせて,より大きなパターンを特定します。最後の全結合層は,これらの特徴を組み合わせてイメージを分類します。そのため,最後の全結合層のOutputSizeパラメーターは,ターゲットデータのクラスの数と等しくなります。この例では10個のクラスに対応して,出力サイズが10になっています。fullyConnectedLayerを使用して,全結合層を作成します。

ソフトマックス層ソフトマックス活性化関数は,全結合層の出力を正規化します。ソフトマックス層の出力は合計が 1 になる正の数値で構成されており、分類層で分類の確率として使用できます。最後の全結合層の後に関数softmaxLayerを使用してソフトマックス層を作成します。

分類層最後の層は分類層です。この層は,ソフトマックス活性化関数によって各入力について返された確率を使用して,互いに排他的なクラスの1つに入力を割り当て,損失を計算します。分類層を作成するには,classificationLayerを使用します。

学習オプションの指定

ネットワーク構造を定義した後,学習オプションを指定します。初期学習率0.01をとしたモーメンタム項付き確率的勾配降下法(个)を使用して,ネットワークに学習させます。エポックの最大数を4に設定します。エポックとは,学習データセット全体の完全な学習サイクルのことです。検証データと検証頻度を指定して,学習中にネットワークの精度を監視します。すべてのエポックでデータをシャッフルします。学習データでネットワークに学習させ,学習中に一定の間隔で検証データに対してその精度を計算します。検証データは,ネットワークの重みの更新には使用されません。学習の進行状況プロットをオンにして,コマンドウィンドウの出力をオフにします。

选择= trainingOptions (“个”...“InitialLearnRate”, 0.01,...“MaxEpochs”4...“洗牌”“every-epoch”...“ValidationData”imdsValidation,...“ValidationFrequency”30岁的...“详细”假的,...“阴谋”“训练进步”);

学習データを使用したネットワークの学習

,学習データ,および学習オプションによって定義されたアーキテクチャを使用して,ネットワークに学習させます。既定では,利用可能なGPUがある場合,trainNetworkはGPUを使用します(并行计算工具箱™,および以3.0计算能力上のCUDA®対応GPUが必要)。そうでない場合はCPUが使用されます。trainingOptionsの名前と値のペアの引数“ExecutionEnvironment”を使用して,実行環境を指定することもできます。

学習の進行状況プロットには,ミニバッチの損失と精度,および検証の損失と精度が表示されます。学習の進行状況プロットの詳細は,深層学習における学習の進行状況の監視を参照してください。損失は交差エントロピー損失です。精度は,ネットワークによって正しく分類されるイメージの割合です。

网= trainNetwork (imdsTrain层,选项);

検証イメージの分類と精度の計算

学習済みネットワークを使用して検証データのラベルを予測し,最終検証精度を計算します。精度とは,ネットワークによって予測が正しく行われるラベルの割合です。この場合,99%を超える予測ラベルが検証セット内の真のラベルに一致しています。

YPred =分类(净,imdsValidation);YValidation = imdsValidation.Labels;精度= sum(YPred == YValidation)/numel(YValidation)
精度= 0.9988

参考

|||

関連するトピック