i am using Matlab for medical image classification and i get this issue: note: i used pre-trained network (alexnet) with .dicom files dataset. first i prepare my design network second, i run my code. >> deepNetworkDesigner >> SHIVANCLASSIFY net = SeriesNetwork with properties: Layers: [25×1 nnet.cnn.layer.Layer] InputNames: {'data'} OutputNames: {'output'} Error using trainNetwork (line 170) The training images are of size 227x227x1 but the input layer expects images of size 227x227x3. Error in SHIVANCLASSIFY (line 36) net = trainNetwork(augimdsTrain,layers_1,options) net=alexnet imds = imageDatastore('lung dataset-Labeled', ... 'IncludeSubfolders',true, 'LabelSource','foldernames', ... % this for labeling by folder names 'FileExtensions','.dcm','ReadFcn',@readDicomDatastoreImage); % this a function [imdsTrain,imdsValidation] = splitEachLabel(imds,0.7); augmenter = imageDataAugmenter( ... 'RandRotation',[-20,20], ... 'RandXReflection',1,... 'RandYReflection',1,... 'RandXTranslation',[-3 3], ... 'RandYTranslation',[-3 3]); %augimdsTrain = augmentedImageDatastore([224 224],imdsTrain,'DataAugmentation',augmenter); %augimdsValidation = augmentedImageDatastore([224 224],imdsValidation,'DataAugmentation',augmenter); augimdsTrain = augmentedImageDatastore([227 227],imdsTrain); augimdsValidation = augmentedImageDatastore([227 227],imdsValidation); options = trainingOptions('rmsprop', ... 'MiniBatchSize',10, ... 'MaxEpochs',20, ... 'InitialLearnRate',1e-3, ... 'Shuffle','every-epoch', ... 'ValidationData',augimdsValidation, ... 'ValidationFrequency',3, ... 'Verbose',false, ... 'Plots','training-progress'); net = trainNetwork(augimdsTrain,layers_1,options) [YPred, probs] = classify(net,augimdsValidation); accuracy = mean(YPred ==imdsValidation.Labels) figure cm=confusionchart (imdsValidation.Labels, YPred);
John Williams answered .
2025-11-20
clear all; close all; clc;
imds = imageDatastore('lung dataset-Labeled', ...
'IncludeSubfolders',true, 'LabelSource','foldernames', ... % this for labeling by folder names
'FileExtensions','.dcm','ReadFcn',@readDicomDatastoreImage); % this a function
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7);
net = alexnet(); % analyzeNetwork(lgraph)
numClasses = numel(categories(imdsTrain.Labels)); % number of classes = number of folders
imageSize = [227 227]; % you can use here the original dataset size
global GinputSize
GinputSize = imageSize;
lgraph = layerGraph(net.Layers);
lgraph = removeLayers(lgraph, 'fc8');
lgraph = removeLayers(lgraph, 'prob');
lgraph = removeLayers(lgraph, 'output');
% create and add layers
inputLayer = imageInputLayer([imageSize 1], 'Name', net.Layers(1).Name,...
'DataAugmentation', net.Layers(1).DataAugmentation, ...
'Normalization', net.Layers(1).Normalization);
lgraph = replaceLayer(lgraph,net.Layers(1).Name,inputLayer);
newConv1_Weights = net.Layers(2).Weights;
newConv1_Weights = mean(newConv1_Weights(:,:,1:3,:), 3); % taking the mean of kernal channels
newConv1 = convolution2dLayer(net.Layers(2).FilterSize(1), net.Layers(2).NumFilters,...
'Name', net.Layers(2).Name,...
'NumChannels', inputLayer.InputSize(3),...
'Stride', net.Layers(2).Stride,...
'DilationFactor', net.Layers(2).DilationFactor,...
'Padding', net.Layers(2).PaddingSize,...
'Weights', newConv1_Weights,...BiasLearnRateFactor
'Bias', net.Layers(2).Bias,...
'BiasLearnRateFactor', net.Layers(2).BiasLearnRateFactor);
lgraph = replaceLayer(lgraph,net.Layers(2).Name,newConv1);
lgraph = addLayers(lgraph, fullyConnectedLayer(numClasses,'Name', 'fc2'));
lgraph = addLayers(lgraph, softmaxLayer('Name', 'softmax'));
lgraph = addLayers(lgraph, classificationLayer('Name','output'));
lgraph = connectLayers(lgraph, 'drop7', 'fc2');
lgraph = connectLayers(lgraph, 'fc2', 'softmax');
lgraph = connectLayers(lgraph, 'softmax', 'output');
% -------------------------------------------------------------------------
augmenter = imageDataAugmenter( ...
'RandRotation',[-20,20], ...
'RandXReflection',1,...
'RandYReflection',1,...
'RandXTranslation',[-3 3], ...
'RandYTranslation',[-3 3]);
%augimdsTrain = augmentedImageDatastore([224 224],imdsTrain,'DataAugmentation',augmenter);
%augimdsValidation = augmentedImageDatastore([224 224],imdsValidation,'DataAugmentation',augmenter);
augimdsTrain = augmentedImageDatastore(imageSize,imdsTrain);
augimdsValidation = augmentedImageDatastore(imageSize,imdsValidation);
options = trainingOptions('rmsprop', ...
'MiniBatchSize',10, ...
'MaxEpochs',20, ...
'InitialLearnRate',1e-3, ...
'Shuffle','every-epoch', ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
net = trainNetwork(augimdsTrain,lgraph,options)
[YPred, probs] = classify(net,augimdsValidation);
accuracy = mean(YPred ==imdsValidation.Labels)
figure
cm=confusionchart (imdsValidation.Labels, YPred);
you also need to update the readDicomDatastoreImage function to resize every image you read with specified size:
function I = readDicomDatastoreImage(filename)
onState = warning('off', 'backtrace');
c = onCleanup(@() warning(onState));
I = dicomread(filename);
global GinputSize;
I = imresize(I,GinputSize(1:2));