how to fix this issue through running the program?

Illustration
shinam_mishra - 2021-06-03T12:57:08+00:00
Question: how to fix this issue through running the program?

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);

Expert Answer

Profile picture of John Williams John Williams answered . 2025-11-20

you cannot use pre-trained network unless you adjust it to your data
1. for alexnet, this pre-trained network takes 227x227x3 because it deals with RGB images
2. and that also applies to the first ConveNet which takes 3 channels because its kernels have 3 channels, in which you also have to update
3. you must update the last three classification layers to classify based on your classes
 
i also think that you are trying to resize your lung dataset to 227x227 in which you may lose some of its quality
 
this code should work for you, and if it's not clear i can clarify it for you
 
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));


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!