下載的代碼和資料集,只修改了路徑,但是出現明明有22的樣本,每個檔案夾里面10張圖,
但是
當numTrainFiles = 17 ;% 每一個數字有22個樣本,取17個樣本作為訓練資料時
錯誤使用 matlab.io.datastore.ImageDatastore/splitEachLabel (line 211)
比例值之和(17)不能超過具有最少檔案數(10)的標簽中的檔案數。
請使用 COUNTEACHLABEL 和 MIN 查看與標簽關聯的最小檔案數。
出錯 newff0312 (line 15)
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize')
修改numTrainFiles = 9時,
錯誤使用 trainNetwork (line 170)
無效的訓練資料。最后一層的輸出大小(10)與類的數量(22)不匹配。
出錯 newff0312 (line 55)
net = trainNetwork(imdsTrain, layers ,options); %訓練資料,神經元設計,訓練引數
修改digitDatasetPath = fullfile('D:\201910\CT\', '/train1/');
這個路徑讀取的是dcm圖,但是出現錯誤
錯誤使用 imageDatastore (line 125)
輸入檔案夾或檔案包含非標準的檔案擴展名。
使用 FileExtensions 名稱-值對組以包含非標準的檔案擴展名。
出錯 newff0315 (line 7)
imds = imageDatastore(digitDatasetPath, ...
下載的代碼
%% 匯入資料
digitDatasetPath = fullfile('D:\201910\CT\', '/hwDataset/');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true,'LabelSource','foldernames');% 采用檔案夾名稱作為資料標記
%,'ReadFcn',@mineRF
% 資料集圖片個數
countEachLabel(imds)
numTrainFiles = 9 ;% 每一個數字有22個樣本,取17個樣本作為訓練資料
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
% 查看圖片的大小
img=readimage(imds,1);
size(img)
%% 定義卷積神經網路的結構
layers = [
% 輸入層
imageInputLayer([28 28 1]) %輸入圖片大小為28*28,灰度圖片通道為1
% 卷積層 (特征映射大小計算方式32-5+1=28)
convolution2dLayer(5,6,'Padding',2) %卷積核5*5,提取6種特征映射,
batchNormalizationLayer %padding圖片周圍補零以保持還是這次卷積之后特征映射28*28,28-5+4+1
reluLayer
maxPooling2dLayer(2,'stride',2) %下采樣核2*2
convolution2dLayer(5, 16)
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'stride',2)
convolution2dLayer(5, 120)
batchNormalizationLayer
reluLayer
% 最終層
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
%% 訓練神經網路
% 設定訓練引數
options = trainingOptions('sgdm',... %最優化方法
'maxEpochs', 50, ... %重復次數
'ValidationData', imdsValidation, ...%驗證的資料
'ValidationFrequency',5,... %驗證頻率
'Verbose',false,... %是否顯示中間結果
'Plots','training-progress');% 顯示訓練進度
% 訓練神經網路,保存網路
net = trainNetwork(imdsTrain, layers ,options); %訓練資料,神經元設計,訓練引數
save 'CSNet.mat' net
%% 標記資料(檔案名稱方式,自行構造)
mineSet = imageDatastore('D:\201910\CT\hwDataset\hw9\', 'FileExtensions', '.jpg',...
'IncludeSubfolders', false);%%,'ReadFcn',@mineRF
mLabels=cell(size(mineSet.Files,1),1);
for i =1:size(mineSet.Files,1)
[filepath,name,ext] = fileparts(char(mineSet.Files{i}));
mLabels{i,1} =char(name);
end
mLabels2=categorical(mLabels);
mineSet.Labels = mLabels2;
%% 使用網路進行分類并計算準確性
% 手寫資料
YPred = classify(net,mineSet);
YValidation =mineSet.Labels;
% 計算正確率
accuracy = sum(YPred ==YValidation)/numel(YValidation);
% 繪制預測結果
figure;
nSample=10;
ind = randperm(size(YPred,1),nSample);
for i = 1:nSample
subplot(2,fix((nSample+1)/2),i)
imshow(char(mineSet.Files(ind(i))))
title(['預測:' char(YPred(ind(i)))])
if char(YPred(ind(i))) ==char(YValidation(ind(i)))
xlabel(['真實:' char(YValidation(ind(i)))])
else
xlabel(['真實:' char(YValidation(ind(i)))],'color','r')
end
end
% 伸縮+反色
% function data =mineRF(filename)
% img= imread(filename);
% data=https://bbs.csdn.net/topics/uint8(255-rgb2gray(imresize(img,[28 28])));
%
% end
% 二值化
% function data =mineRF(filename)
% img= imread(filename);
% data=https://bbs.csdn.net/topics/imbinarize(img);
%
% end
得到的錯誤結果
ans =
22×2 table
Label Count
_____ _____
hw1 10
hw10 10
hw11 10
hw12 10
hw13 10
hw14 10
hw15 10
hw16 10
hw17 10
hw18 10
hw19 10
hw2 10
hw20 10
hw21 10
hw23 10
hw3 10
hw4 10
hw5 10
hw6 10
hw7 10
hw8 10
hw9 10
ans =
28 28
錯誤使用 trainNetwork (line 170)
無效的訓練資料。最后一層的輸出大小(10)與類的數量(22)不匹配。
出錯 newff0312 (line 55)
net = trainNetwork(imdsTrain, layers ,options); %訓練資料,神經元設計,訓練引數
>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/20107.html
標籤:圖形處理/算法
