Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

シンプルなイメージ分類ネットワークの作成

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

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

  • イメージ データを読み込みます。

  • ネットワーク アーキテクチャを定義します。

  • 学習オプションを指定します。

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

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

シンプルなイメージ分類ネットワークの作成および学習を対話的に行う方法を示す例については、ディープ ネットワーク デザイナーを使用したシンプルなイメージ分類ネットワークの作成を参照してください。

データの読み込み

数字の標本データを解凍し、イメージ データストアを作成します。関数 imageDatastore は、フォルダー名に基づいてイメージに自動的にラベルを付けます。

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

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

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomized');

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

畳み込みニューラル ネットワーク アーキテクチャを定義します。ネットワークの入力層にイメージのサイズを指定し、分類層の前の全結合層にクラスの数を指定します。それぞれのイメージは 28 x 28 x 1 ピクセルで、10 個のクラスがあります。

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

深層学習層の詳細は、深層学習層の一覧を参照してください。

ネットワークの学習

学習オプションを指定し、ネットワークに学習させます。

既定で、trainNetwork は、使用可能な GPU があれば GPU を使用し、なければ CPU を使用します。GPU で学習を行うには、Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。trainingOptions の名前と値のペアの引数 'ExecutionEnvironment' を使用して、実行環境を指定することもできます。

options = trainingOptions('sgdm', ...
    'MaxEpochs',4, ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

net = trainNetwork(imdsTrain,layers,options);

Figure Training Progress (29-Aug-2023 21:25:02) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 11 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 11 objects of type patch, text, line.

学習オプションの詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。

ネットワークのテスト

検証データを分類し、分類精度を計算します。

YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = mean(YPred == YValidation)
accuracy = 0.9888

深層学習の次のステップとして、事前学習済みのネットワークを他のタスクに使用してみることができます。転移学習または特徴抽出を使用して、自分のイメージ データで新しい分類問題を解決してみましょう。例については、転移学習を使用した短時間での深層学習の開始事前学習済みのネットワークから抽出された特徴を使用した分類器の学習を参照してください。事前学習済みのネットワークの詳細は、事前学習済みの深層ニューラル ネットワークを参照してください。

参考

|

関連するトピック