こちらの記事でモデルの構築を行いました。
今回は、作ったモデルをテストデータを用いて検証する方法を書きます。
前回のコード
sample.m
%% データの読み込み
imds = imageDatastore('./pictures', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
%% データの分割
[trainData, testData] = splitEachLabel(imds, 0.6, 'randomized');
%% ニューラルネットワーク読み込み
net = vgg16;
%% ネットワーク層修正
layers = net.Layers;
numClasses = numel(categories(imds.Labels));
layers(39) = fullyConnectedLayer(numClasses);
layers(41) = classificationLayer;
%% ネットワークのインプットサイズに合わせて画像リサイズ
inputSize = net.Layers(1).InputSize(1:2);
augTrainData = augmentedImageDatastore(inputSize, trainData);
augTestData = augmentedImageDatastore(inputSize, testData);
%% 学習オプション
options = trainingOptions('sgdm', ...
'MiniBatchSize',10, ...
'MaxEpochs',6, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData', augTrainData, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
%% 学習
netTransfer = trainNetwork(augTrainData, layers, options);
%% テストデータで予測
[predLabels, scores] = classify(netTransfer, augTestData);
検証はこちらの続きから書いていきます。
%% テストデータを用いてモデル精度の検証
testDataLabels = testData.Labels;
correct = nnz(testDataLabels == predLabels);
DataCount = numel(testData.Labels);
accuracy = correct / DataCount;
%% 可視化
% 真のラベルと予測したラベル
confusionchart(testDataLabels, predLabels);
accuracy
こちらの中に正答率が格納されます
画像のように縦軸を真のクラス、横軸を予測したラベルとして分布表が現れます。
今後やること
この記事の修正を行い、もう少し詳しく書いていきます。
ブログへ移行しましたので、興味ある方はぜひ見てください.