1 问题

从2018版开始用深度学习功能,matlab的函数在不断的演化,老程序就不能用了。

net = trainNetwork(XTrain,YTrain,layers,options);
原来Xtrain 可以为4d数据,Ytrain 为数据标签。

现在xtrain需要为2dcell数据

 Ytrain 没有变化

 如果在新版本使用,可以有2种方法

1 转为图片;

2 使用aug

%test
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain);

2 使用方法

转为cell数组

% 转换数据 20220930
% imageSize = [28 28 1];
% augimds = augmentedImageDatastore(imageSize,train,train_label);
%转为cell 数组
Xtrain=cell(size(train,4),1);
Xval=cell(size(Vali,4),1);
Xtest=cell(size(test,4),1);
%赋值
for i=1:size(train,4)
    Xtrain{i}=train(:,:,1,i);
end
for i=1:size(Vali,4)
    Xval{i}=Vali(:,:,1,i);
end 

for i=1:size(test,4)
    Xtest{i}=test(:,:,1,i);
end

问题发现在于 option设置不对

原来的option为这个。。

miniBatchSize = 64;
validationFrequency = floor(numel(train_label)/miniBatchSize);
%修改为adam
options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.005, ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'ValidationData',{Xval,Vali_label}, ...
    'ValidationFrequency',validationFrequency, ...
    'Verbose',false, ...
    'Plots','training-progress');

简化的option可以运行

options = trainingOptions('sgdm', 'Plots', 'training-progress');
% train the network
 Anet  = trainNetwork(train,train_label,layers,options);

是修改程序 导致 验证集的 大小不匹配。看了trainnetwork 源码 才意识到。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐