Error using nnet.cnn.LayerGraph>iThrowErrorIfStartLayerIsOutputLayer Unable to connect to the layer 'ClassificationLayer_fc1000'. This layer is an output layer and has no outp
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi everyone,
I am trying to learn deep learning but I am getting the error. here is the code.
gTruth(1:4,:)
rng(0);
shuffledIndices = randperm(height(gTruth));
idx = floor(0.6 * length(shuffledIndices) );
trainingData = gTruth(shuffledIndices(1:idx),:);
testData = gTruth(shuffledIndices(idx+1:end),:);
imdsTrain = imageDatastore(trainingData{:,'imageFilename'});
bldsTrain = boxLabelDatastore(trainingData(:,2:end));
imdsTest = imageDatastore(testData{:,'imageFilename'});
bldsTest = boxLabelDatastore(testData(:,2:end));
trainingData = combine(imdsTrain,bldsTrain);
testData = combine(imdsTest, bldsTest);
data = read(trainingData);
I = data{1};
bbox = data{2};
annotatedImage = insertShape(I,'rectangle',bbox);
annotatedImage = imresize(annotatedImage,2);
figure
imshow(annotatedImage)
net = resnet50();
lgraph = layerGraph(net);
inputSize = [2872 920 3];
classNames = {'orangecone','bluecone', 'yellowcone'};
ssdLayerGraph = removeLayers(lgraph,'activation_40_relu');
weightsInitializerValue = 'glorot';
biasInitializerValue = 'zeros';
% Append Extra layers on top of a base network.
extraLayers = [];
% Add conv6_1 and corresponding reLU
filterSize = 1;
numFilters = 256;
numChannels = 1024;
conv6_1 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Name = 'conv6_1', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu6_1 = reluLayer(Name = 'relu6_1');
extraLayers = [extraLayers; conv6_1; relu6_1];
% Add conv6_2 and corresponding reLU
filterSize = 3;
numFilters = 512;
numChannels = 256;
conv6_2 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Padding = "same", ...
Stride = [2, 2], ...
Name = 'conv6_2', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu6_2 = reluLayer(Name = 'relu6_2');
extraLayers = [extraLayers; conv6_2; relu6_2];
% Add conv7_1 and corresponding reLU
filterSize = 1;
numFilters = 128;
numChannels = 512;
conv7_1 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Name = 'conv7_1', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu7_1 = reluLayer(Name = 'relu7_1');
extraLayers = [extraLayers; conv7_1; relu7_1];
% Add conv7_2 and corresponding reLU
filterSize = 3;
numFilters = 256;
numChannels = 128;
conv7_2 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Padding = "same", ...
Stride = [2, 2], ...
Name = 'conv7_2', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu7_2 = reluLayer(Name = 'relu7_2');
extraLayers = [extraLayers; conv7_2; relu7_2];
% Add conv8_1 and corresponding reLU
filterSize = 1;
numFilters = 128;
numChannels = 256;
conv8_1 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Name = 'conv8_1', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu8_1 = reluLayer(Name = 'relu8_1');
extraLayers = [extraLayers; conv8_1; relu8_1];
% Add conv8_2 and corresponding reLU
filterSize = 3;
numFilters = 256;
numChannels = 128;
conv8_2 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Name = 'conv8_2', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu8_2 = reluLayer(Name ='relu8_2');
extraLayers = [extraLayers; conv8_2; relu8_2];
% Add conv9_1 and corresponding reLU
filterSize = 1;
numFilters = 128;
numChannels = 256;
conv9_1 = convolution2dLayer(filterSize, numFilters, NumChannels = numChannels, ...
Padding = "same", ...
Name = 'conv9_1', ...
WeightsInitializer = weightsInitializerValue, ...
BiasInitializer = biasInitializerValue);
relu9_1 = reluLayer('Name', 'relu9_1');
extraLayers = [extraLayers; conv9_1; relu9_1];
if ~isempty(extraLayers)
lastLayerName = ssdLayerGraph.Layers(end).Name;
ssdLayerGraph = addLayers(ssdLayerGraph, extraLayers);
ssdLayerGraph = connectLayers(ssdLayerGraph, lastLayerName, extraLayers(1).Name);
end
error :
Error using nnet.cnn.LayerGraph>iThrowErrorIfStartLayerIsOutputLayer
Unable to connect to the layer 'ClassificationLayer_fc1000'. This layer is an output layer and has no
outputs to other layers.
Error in nnet.cnn.LayerGraph>iGetSourceInformation (line 629)
iThrowErrorIfStartLayerIsOutputLayer( layers(startLayerIndex) );
Error in nnet.cnn.LayerGraph/connectLayers (line 295)
[startLayerName,startLayerIndex,~, layerOutputIndex] = iGetSourceInformation(s, layers);
>>
1 Kommentar
Rahul
am 5 Jan. 2023
I have analyzed the code shared by you. Please make the changes in the code as shown below. You will see the layered graph.
if ~isempty(extraLayers)
lastLayerName = ssdLayerGraph.Layers(end).Name;
ssdLayerGraph = addLayers(ssdLayerGraph, extraLayers);
%ssdLayerGraph = connectLayers(ssdLayerGraph, lastLayerName, extraLayers(1).Name);
end
analyzeNetwork(ssdLayerGraph)
In this, you will find issues in the attached image.
Please confirm the connections, its inputs and outputs. Based on that, you can connect your layers as per that information. Please refer to the documentation page of "addLayers", "connectLayers" for your reference.
Antworten (1)
Rahul
am 9 Jan. 2023
I have analyzed the code shared by you. Please make the changes in the code as shown below. You will see the layered graph.
if ~isempty(extraLayers)
lastLayerName = ssdLayerGraph.Layers(end).Name;
ssdLayerGraph = addLayers(ssdLayerGraph, extraLayers);
%ssdLayerGraph = connectLayers(ssdLayerGraph, lastLayerName, extraLayers(1).Name);
end
analyzeNetwork(ssdLayerGraph)
Please confirm the connections, its inputs and outputs. Based on that, you can connect your layers as per that information. Please refer to the documentation page of "addLayers", "connectLayers" for your reference.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Deep Learning Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!