deep learning_alexnet
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Srinidhi Gorityala
el 26 de Mayo de 2020
Editada: Walter Roberson
el 2 de Oct. de 2020
Helo, iam working on Alexnet network.... below is the error i have got.could anyone please help me in solving this.
Error using trainNetwork (line 170)
The training images are of size 227x227x3 but the input layer expects images of size 227x227x1.
Error in Untitled1 (line 63)
net = trainNetwork(augimdsTrain,lgraph,options);
clear all;
clc;
close all;
myTrainingFolder = 'C:\Users\Admin\Desktop\Major Project\cnn_dataset';
%testingFolder = 'C:\Users\Be Happy\Documents\MATLAB\gtsrbtest';
imds = imageDatastore(myTrainingFolder,'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[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);
Respuesta aceptada
Mohammad Sami
el 26 de Mayo de 2020
Editada: Mohammad Sami
el 26 de Mayo de 2020
You have specified the image as single channel in your code. just change it to 3 channels (RGB).
imageInputLayer([imageSize 1],....
to
imageInputLayer([imageSize 3],....
5 comentarios
Mohammad Sami
el 7 de Sept. de 2020
This code is for transfer learning. That is when you already have a pretrained model that you wish to use for another purpose. The process is explained in detail in MATLAB's documentation.
Using Deep Network Designer:
Usign Manual Method:
Since the network was trained with different classes then your current purpose, you have to remove the final few layers at least from the last fully connected layer onwards. This is because the final fully connected layer needs to have the same output size as the number of classess in your data.
You then have to have to create new layers for the layers that you removed. The new fully connected layer has the output size which matches the number of classes in your data. Finally you can add these newly connected layers to complete your network.
shivan artosh
el 2 de Oct. de 2020
Editada: Walter Roberson
el 2 de Oct. de 2020
hello sir
as i said i have this code and i need to exchange AlexNet with (vgg16, vgg19, ResNet18 and densnet201) one by one.
could you please tell me which part of this code should be changed?
i posted my question here:
Más respuestas (0)
Ver también
Categorías
Más información sobre Image Data Workflows en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!