无效的训练数据。最后一层的输出大小(1000)与类的数量(68)不匹配。

5次浏览(过去30天)
Ulli Kassler
Ulli Kassler 2021年8月25日
评论: 神骑士 2021年9月16日
我尝试使用我的代码的Xception和ResNet50。它工作的AlexNet和VGG16,现在我得到上述错误。
有人可以告诉我我的代码是什么问题或我如何解决它?
[IMDStrain,IMDSValidation] = SpliteachLabel(Trainset,0.7,'随机');
net = xception;
InputSize = Net.Layers(1).InputSize;
Augimdstrain = AugmentedimageDataStore(InputSize(1:2),IMDstrain,'OuthaneIzeMode','调整大小','ColorPrepossing','Gray2RGB');
augimdsvalidation = augmentedimagedataStore(Inputsize(1:2),IMDSvalidation,'OutputSizeMode','调整大小','ColorPrepossing','Gray2RGB');
%lgraph = vgg16 (' weights ','none');
Layerstransfer = Net.Layers(1:结束-3);
% layer_Classifiy = fullyConnectedLayer (numClasses);
%layer_classifiy.name ='fc1000';%resnet fc1000
%Lgraph =替换器(LAGHS,'FC1000',Layer_Classifiy);
numclasses = numel(类别(imdstrain.labels))
层= [
layersTransfer
全连接列(numcrasses,'weyrlearnratefact',20,'biaslearnratefactor',20)
softmaxlayer.
分类层];
%net_vgg16 = trainnetwork(augimdstrain_matrix,选项);
options = trainingOptions('sgdm',…
'minibatchsize',3,...
'maxepochs',6,...
“InitialLearnRate”,1的军医,…
“洗牌”、“every-epoch’,……
'validationdata',augimdsvalidation,...
'验证频道',50,...
'verbose',false,...
“阴谋”、“训练进步”,…
'executionenvironment','gpu');
NetTransfer = Trainnetwork(Augimdstrain,LayerGraph(网络),选项);
augimdstest = augmentedimageageataStore(Inputsize(1:2),testset,'OutputSizeMode','调整大小','ColorPrepossing','Gray2RGB');
YPred =分类(netTransfer,augimdsTest, 'MiniBatchSize', 5);
欧美= testset.Labels;
精度=均值(ypred == ytest)

答案(1)

Prateek拉伊
Prateek拉伊 2021年9月13日
据我理解,您希望使用Xception和ResNet50的代码,并获得无效训练数据的错误。在给定的代码中,您没有更新“网络”。层”,因此trainNetwork使用的是针对1000个类的Xception。
你可以更新"net "。层”如下所述:
net.layers =图层;
所以总体代码看起来是这样的:
(注意:在修改的位置添加注释)
[IMDStrain,IMDSValidation] = SpliteachLabel(Trainset,0.7,“随机”);
net = xception;
InputSize = Net.Layers(1).InputSize;
Augimdstrain = AugmentedimageGedataStore(Inputsize(1:2),IMDstrain,'outputsizeMode'“调整”“ColorPreprocessing”'gray2rgb');
AugimdsValidation = AugmentedImageDataStore(InputSize(1:2),IMDSValidation,'outputsizeMode'“调整”“ColorPreprocessing”'gray2rgb');
%lgraph = vgg16 (' weights ','none');
Layerstransfer = Net.Layers(1:结束-3);
% layer_Classifiy = fullyConnectedLayer (numClasses);
%layer_classifiy.name ='fc1000';%resnet fc1000
%Lgraph =替换器(LAGHS,'FC1000',Layer_Classifiy);
numclasses = numel(类别(imdstrain.labels))
层= [
layersTransfer
全连接列(Numcrasses,“WeightLearnRateFactor”,20,'biaslearnratefactor', 20)
softmaxlayer.
分类层];
%net_vgg16 = trainnetwork(augimdstrain_matrix,选项);
选择= trainingOptions (“个”......
'迷你atchsize'3,......
'maxepochs'6......
'italllearnrate',1E-4,......
'洗牌'“every-epoch”......
“ValidationData”,augimdsvalidation,......
“ValidationFrequency”, 50岁,......
'verbose'假的,......
'plots''培训 - 进步'......
'executionenvironment'“图形”);
%%——净更新。需要添加新“层”的层——%%
net.layers =图层;
%% - %%
NetTransfer = Trainnetwork(Augimdstrain,LayerGraph(网络),选项);
augimdstest = upmentedimageageataStore(Inputsize(1:2),测试集,'outputsizeMode'“调整”“ColorPreprocessing”'gray2rgb');
YPred =分类(netTransfer augimdsTest,'迷你atchsize'5);
欧美= testset.Labels;
精度=均值(ypred == ytest)
你可以参考 xception MathWorks文档页面可以找到更多关于异常卷积神经网络的信息。
1条评论
神骑士
神骑士 2021年9月16日
net.layers =图层 不能工作,因为该属性是不可编辑的。你的问题是你并没有真正训练修改过的网络,你只是通过了 layerGraph(净) Trainnetwork. 。也许你这样做是因为传递 层数 没工作,这将是因为 resnet50 不是系列网络,不能像一个人训练。您需要编辑图层图形,以便您不会破坏其连接。
lgraph = layerGraph(净);
lgraph = removeLayers(lgraph, {lgraph. layers (end-3:end).Name});
lastlayername = lgraph.Layers(END).name;
Lgraph = Addlayers(LAPHAGE,......
[fullyConnectedLayer numClasses,“WeightLearnRateFactor”,20,'biaslearnratefactor',20,'姓名''fctransfer'的)
softmaxlayer.
分类层];
lgraph = connectLayers(lgraph, lastLayerName, lastLayerName)'fctransfer');
......
NetTransfer = Trainnetwork(Augimdstrain,LayerGraph(网络),选项);

登录评论。

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的