分類用のシンプルな深層学習ネットワクの作成
この例では,深層学習による分類用のシンプルな畳み込みニューラルネットワークを作成し,学習を行う方法を説明します。畳み込みニューラルネットワークは深層学習に不可欠なツールであり,特にイメージの認識に適しています。
この例では,以下を実行する方法を示します。
econメジデタの読み込みと確認。
ネットワクアキテクチャの定義。
学習オプションの指定。
ネットワクに学習をさせます。
新しいデタのラベルの予測と分類精度の計算。
シンプルなメジ分類ネットワクの作成および学習を対話的に行う方法を示す例に,ディを参照してください。
econメジデタの読み込みと確認
数字の標本デタを。imageDatastore
は,フォルダImageDatastore
オブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータなどの大きなイメージデータを格納し,畳み込みニューラルネットワークの学習中にイメージをバッチ単位で効率的に読み取ることができます。
digitDatasetPath = fullfile(matlabroot,“工具箱”,“nnet”,“nndemos”,...“nndatasets”,“DigitDataset”);imds = imageDatastore(digitDatasetPath,...“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);
デタストアの。
图;Perm = randperm(10000,20);为I = 1:20 subplot(4,5, I);imshow (imds.Files{烫发(i)});结束
各カテゴリの邮箱メ邮箱ジの数を計算します。labelCount
は,ラベル,およびそれぞれのラベルが付いているeconメジの数を格納する表です。データストアには0 ~ 9の数字それぞれについて1000個のイメージ,合計で10000個のイメージが含まれます。ネットワクの最後の全結合層のクラス数を引数OutputSize
として指定できます。
labelCount = countEachLabel(imds)
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 × 1ピクセルです。
Img = readimage(imds,1);大小(img)
ans =1×228日28日
学習セットと検証セットの指定
データを学習データセットと検証データセットに分割し,学習セットの各カテゴリに750個のイメージが含まれ,検証セットに各ラベルの残りのイメージが含まれるようにします。splitEachLabel
は,デタストアdigitData
を2の新しいデタストアtrainDigitData
とvalDigitData
に分割します。
numTrainFiles = 750;[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,“随机”);
ネットワクアキテクチャの定義
畳み込みニュラルネットワクアキテクチャを定義します。
layers = [imageInputLayer([28 28 1]) convolution2dLayer(3,8,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”,“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”,“相同”) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
帐号メ帐号ジ入力層imageInputLayer
には邮箱メ邮箱ジサ邮箱ズを指定します。ここでは28 x 28 x 1です。これらの数値は,高さ,幅,およびチャネルサe .ズに対応します。数字データはグレースケールイメージで構成されるため,チャネルサイズ(カラーチャネル)は1です。カラ,rgb値に対応してチャネルサ3になります。デタは,trainNetwork
により既定で学習の開始時にシャッフルされるため,シャッフルの必要はありません。学習時の各エポックの開始時にも,trainNetwork
によりデタは自動的にシャッフルされます。
畳み込み層畳み込み層の最初の引数はfilterSize
です。これは、メジのスキャン時に学習関数によって使用されるフィルタの高さと幅を示します。この例では,3という数字によってフィルタ3 × 3であることを示しています。フィルタの高さと幅には異なるサ。2 ecomm目の引数numFilters
はフィルタの数です。これは,入力の同じ領域に結合するニューロンの数を示します。このパラメーターによって、特徴マップの数が決定されます。名前と値のペア“填充”
を使用して,入力の特徴マップにパディングを追加します。既定のストラドが1の畳み込み層の場合,“相同”
パディングによって空間の出力サ邮箱ズが入力サ邮箱ズと同じになります。convolution2dLayer
の名前と値のペアの引数を使用して、この層のストラ以及ドと学習率を定義することもできます。
バッチ正規化層バッチ正規化層は,ニュラルネットワクを通じて伝播される活性化と勾配を正規化します。これにより,ネットワクの学習は簡単な最適化問題になります。畳み込み層の間にあるバッチ正規化層と、ReLU 層などの非線形性を使用して、ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げます。batchNormalizationLayer
を使用して,バッチ正規化層を作成します。
ReLU層バッチ正規化層の後に非線形活性化関数が続きます。最も一般的な活性化関数は,正規化線形ユニット(ReLU)です。reluLayer
を使用して,ReLU層を作成します。
最大プリング層畳み込み層(と活性化関数)の後で,ダウンサンプリング処理を行うことがあります。これにより,特徴マップの空間サeズが縮小され,冗長な空間情報が削除されます。ダウンサンプリングでは,層ごとに必要な計算量を増やさずに,より深い畳み込み層のフィルターの数を増やすことができます。ダウンサンプリングの1の方法が最大プリングの使用です。これは,maxPooling2dLayer
を使用して作成します。最大プリング層は、最初の引数poolSize
によって指定された,入力の矩形領域の最大値を返します。この例では,矩形領域のサe .ズは[2,2]です。名前と値のペアの引数“步”
は、入力に沿ってスキャンするときに学習関数が取るステップサ以及ズを指定します。
全結合層畳み込み層とダウンサンプリング層の後には,1以上の全結合層を配置します。その名前からわかるように,全結合層はニュロンが前の層のすべてのニュロンに結合している層です。この層は,前の層によってイメージ全体で学習されたすべての特徴を組み合わせて,より大きなパターンを特定します。最後の全結合層は、これらの特徴を組み合わせて。そのため,最後の全結合層のOutputSize
パラメタは,タゲットデタのクラスの数と等しくなります。この例では,10個のクラスに対応して,出力サ邮箱ズが10になっています。fullyConnectedLayer
を使用して,全結合層を作成します。
ソフトマックス層ソフトマックス活性化関数は,全結合層の出力を正規化します。ソフトマックス層の出力は合計が 1 になる正の数値で構成されており、分類層で分類の確率として使用できます。最後の全結合層の後に関数softmaxLayer
を使用してソフトマックス層を作成します。
分類層最後の層は分類層です。この層は,ソフトマックス活性化関数によって各入力について返された確率を使用して,互いに排他的なクラスの1つに入力を割り当て,損失を計算します。分類層を作成するには,classificationLayer
を使用します。
学習オプションの指定
ネットワク構造を定義した後,学習オプションを指定します。初期学習率0.01をとしたモーメンタム項付き確率的勾配降下法(个)を使用して,ネットワークに学習させます。エポックの最大数を4に設定します。エポックとは,学習デクルのことです。検証デタと検証頻度を指定して,学習中にネットワクの精度を監視します。すべてのエポックでデタをシャッフルします。学習デタでネットワクに学習させ,学習中に一定の間隔で検証デタに対してその精度を計算します。検証デタは,ネットワクの重みの更新には使用されません。学習の進行状況プロットをオンにして,コマンドウィンドウの出力をオフにします。
options = trainingOptions(“个”,...“InitialLearnRate”, 0.01,...“MaxEpochs”4...“洗牌”,“every-epoch”,...“ValidationData”imdsValidation,...“ValidationFrequency”30岁的...“详细”假的,...“阴谋”,“训练进步”);
学習デタを使用したネットワクの学習
层
,学習データ,および学習オプションによって定義されたアーキテクチャを使用して,ネットワークに学習させます。既定で,trainNetwork
は,使用可能なgpuがあればgpuを使用し,なければCPUを使用します。GPUで学習を行うには,并行计算工具箱™とサポートされているGPUデバイスが必要です。サポトされているデバスに,リリス別のgpuサポト(并行计算工具箱)を参照してください。trainingOptions
の名前と値のペアの引数“ExecutionEnvironment”
を使用して,実行環境を指定することもできます。
学習の進行状況プロットには,ミニバッチの損失と精度,および検証の損失と精度が表示されます。学習の進行状況プロットの詳細は,深層学習における学習の進行状況の監視を参照してください。損失は交差エントロピ損失です。精度は,ネットワ。
net = trainNetwork(imdsTrain,layers,options);
検証邮箱メ邮箱ジの分類と精度の計算
学習済みネットワクを使用して検証デタのラベルを予測し,最終検証精度を計算します。精度とは,ネットワクによって予測が正しく行われるラベルの割合です。この場合,99%を超える予測ラベルが検証セット内の真のラベルに一致しています。
YPred = category (net,imdsValidation);YValidation = imdsValidation.Labels;accuracy = sum(YPred == YValidation)/numel(YValidation)
精度= 0.9988
参考
trainNetwork
|trainingOptions
|analyzeNetwork
|ディ